1socket+threading编程之TCP
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1socket+threading编程之TCP相关的知识,希望对你有一定的参考价值。
1、Server-TCP
#coding:utf8
‘‘‘
我是在Mac下写的代码,不知道为什么在Windows上中文显示乱码,朋友建议我更改dos窗口编码,我建议朋友放弃Windows写python
‘‘‘
from socket import socket
def response(conn,addr):
data = conn.recv(1024)
node = {‘1‘:1,‘2‘:2,‘3‘:3} #这里参考我一个超级mini项目,本来是if...elif...else结构的,但是无奈选项太多,就用字典代替switch,大家参考一下这种处理问题的思路
if node.has_key(data): #判断字典中是否有data这个key
conn.send(node[data])
print ‘sent server to %s:%s‘%(addr[0],addr[1]) #addr不是字符串,而是一个元组
else:
conn.send(‘Error‘)
print ‘Error Code‘
def server():
address = (‘127.0.0.1‘,8888)
server = socket(AF_INET,SOCK_STREAM)
server.bind(address)
server.listen(5)
‘‘‘
以上是建立socket套接字,由于是基于TCP传输的,大家都知道,TCP是可靠传输,得监听,确认连接,才发送数据
‘‘‘
while 1:
conn,addr = server.accept()
response = threading.Thread(target=response,args=(conn,addr)) #利用多线程,同时处理多个请求
response.start()
#response.join()
if __name__ == ‘__main__:
server()
Client-TCP
#coding:utf8
from socket import socket
def client(data):
addr = (‘127.0.0.1‘,8888)
client = socket(AF_INET,SOCK_STREAM)
try:
client.connect(addr) #连接过程可能会出现异常,抛出异常
except Exception as e:
return ‘Connect error:%s‘%e
client.send(data) #请求服务
server_response = client.recv(2048) #服务器发送服务
return server_response
if __name__ == ‘__main__‘:
data = raw_input(‘please input a number‘)
node = {data,client(data)} #这样写的话好点,也是基于我的超级mini小项目
if node[data] == ‘Error‘:
print ‘input Error,please input again‘
else :
print node[data]
以上是关于1socket+threading编程之TCP的主要内容,如果未能解决你的问题,请参考以下文章
廖雪峰Java13网络编程-1Socket编程-3TCP多线程编程
廖雪峰Java13网络编程-1Socket编程-2TCP编程