1、socket+threading编程之TCP
1 2 3 1、Server-TCP 4 5 #coding:utf8 6 7 ''' 8 9 我是在Mac下写的代码,不知道为什么在Windows上中文显示乱码,朋友建议我更改dos窗口编码,我建议朋友放弃Windows写python 10 11 ''' 12 13 from socket import socket 14 15 def response(conn,addr): 16 17 data = conn.recv(1024) 18 19 node = {'1':1,'2':2,'3':3} #这里参考我一个超级mini项目,本来是if...elif...else结构的,但是无奈选项太多,就用字典代替switch,大家参考一下这种处理问题的思路 20 21 if node.has_key(data): #判断字典中是否有data这个key 22 23 conn.send(node[data]) 24 25 print 'sent server to %s:%s'%(addr[0],addr[1]) #addr不是字符串,而是一个元组 26 27 else: 28 29 conn.send('Error') 30 31 print 'Error Code' 32 33 def server(): 34 35 address = ('127.0.0.1',8888) 36 37 server = socket(AF_INET,SOCK_STREAM) 38 39 server.bind(address) 40 41 server.listen(5) 42 43 ''' 44 45 以上是建立socket套接字,由于是基于TCP传输的,大家都知道,TCP是可靠传输,得监听,确认连接,才发送数据 46 47 ''' 48 49 while 1: 50 51 conn,addr = server.accept() 52 53 response = threading.Thread(target=response,args=(conn,addr)) #利用多线程,同时处理多个请求 54 55 response.start() 56 57 #response.join() 58 59 if __name__ == '__main__: 60 server() 61 62 63 64 Client-TCP 65 66 #coding:utf8 67 68 from socket import socket 69 70 def client(data): 71 72 addr = ('127.0.0.1',8888) 73 74 client = socket(AF_INET,SOCK_STREAM) 75 76 try: 77 78 client.connect(addr) #连接过程可能会出现异常,抛出异常 79 80 except Exception as e: 81 82 return 'Connect error:%s'%e 83 84 client.send(data) #请求服务 85 86 server_response = client.recv(2048) #服务器发送服务 87 88 return server_response 89 90 if __name__ == '__main__': 91 92 data = raw_input('please input a number') 93 94 node = {data,client(data)} #这样写的话好点,也是基于我的超级mini小项目 95 96 if node[data] == 'Error': 97 98 print 'input Error,please input again' 99 100 else : 101 102 print node[data] 103 104