Python多线程Socket程序例子

如果没有multitask包,请从 http://python-multitask.googlecode.com/files/multitask-0.2.0.zip 下载 或从http://code.google.com/p/python-multitask/downloads/list?can=1查找最新版本


http://ghostfromheaven.iteye.com/admin/blogs/1305001


server端  
Python代码 
  1. from __future__ import with_statement  
  2. from contextlib import closing  
  3. import socket  
  4. import multitask  
  5.   
  6. def client_handler(sock):  
  7.     with closing(sock):  
  8.         while True:  
  9.             data = (yield multitask.recv(sock, 1024))  
  10.             if not data:  
  11.                 break  
  12.             yield multitask.send(sock, data)  
  13.   
  14. def echo_server(hostname, port):  
  15.     addrinfo = socket.getaddrinfo(hostname, port,  
  16.                                   socket.AF_INET,  
  17.                                   socket.SOCK_STREAM)  
  18.       
  19.     (family, socketype, porot, canonname, sockaddr) = addrinfo[0]  
  20.     with closing(socket.socket(family,  
  21.                                socketype,  
  22.                                porot)) as sock:  
  23.         sock.setsockopt(socket.SOL_SOCKET,  
  24.                         socket.SO_REUSEADDR, 1)  
  25.         sock.bind(sockaddr)  
  26.         sock.listen(5)  
  27.         while True:  
  28.             multitask.add(client_handler((  
  29.                         yield multitask.accept(sock))[0]))  
  30.                           
  31. if __name__ == '__main__':  
  32.     import sys  
  33.     hostname = '192.168.2.102'  
  34.     port = 1111  
  35.       
  36.     if len(sys.argv) > 1:  
  37.         hostname = sys.argv[1]  
  38.       
  39.     if len(sys.argv) > 2:  
  40.         port = int(sys.argv[2])  
  41.       
  42.     multitask.add(echo_server(hostname, port))  
  43.       
  44.     try:  
  45.         multitask.run()  
  46.     except KeyboardInterrupt:  
  47.         pass  


client端测试  

Python代码 
  1. import socket  
  2.   
  3. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
  4. sock.connect(('192.168.2.102'1111))  
  5.   
  6. sock.send('hello')  
  7.   
  8. data = sock.recv(1024)  
  9. sock.close()  
  10. print 'Received', repr(data)  

你可能感兴趣的:(Python多线程Socket程序例子)