版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jacke121/article/details/83546877
python--gevent高并发socket
原文:https://www.cnblogs.com/guqing/p/6486275.html
server:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
import sys import socket import time import gevent from gevent import socket,monkey monkey.patch_all() def server(port): try : s = socket.socket() s.bind(( '0.0.0.0' ,port)) s.listen( 500 ) while True : cli, addr = s.accept() gevent.spawn(handle_request, cli) except KeyboardInterrupt as e: print (e) def handle_request(conn): try : while True : print ( "before start recv" ) data = conn.recv( 1024 ) print ( "after start recv" ) if not data: #print("client has been closed...") #conn.shutdown(socket.SHUT_RD) conn.close() else : print ( "recv:" , data) conn.send(data) except OSError as e: print ( "client has been closed" ) except Exception as ex: print (ex) finally : conn.close() if __name__ = = '__main__' : server( 8001 ) |
client:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import socket HOST = 'localhost' PORT = 8001 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) while True : msg = bytes( input ( ">>:" ), encoding = "utf-8" ) if msg = = 'q' .encode( "utf-8" ): exit( "退出!" ) s.sendall(msg) data = s.recv( 1024 ) print ( 'Received' , repr (data)) s.close() |