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  

 

posted @ 2017-11-19 10:04  MrHacks  阅读(169)  评论(0)    收藏  举报