Python学习之socketserver
利用socketserver实现并发tcp:
#利用socketserver实现并发: 服务端: import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): print('conn is: ',self.request) #conn print('addr is: ',self.client_address) #addr while True: try: #收消息 data=self.request.recv(1024) if not data:break print('收到客户端的消息是',data,self.client_address) #发消息 self.request.sendall(data.upper()) except Exception as e: print(e) break if __name__ == '__main__': s=socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer) #多线程的tcp服务端 # s=socketserver.ForkingTCPServer(('127.0.0.1',8080),MyServer) #多进程 客户端: from socket import * ip_port=('127.0.0.1',8080) back_log=5 buffer_size=1024 tcp_client=socket(AF_INET,SOCK_STREAM) tcp_client.connect(ip_port) while True: msg=input('>>: ').strip() if not msg:continue if msg == 'quit':break tcp_client.send(msg.encode('utf-8')) data=tcp_client.recv(buffer_size) print('收到服务端发来的消息:',data.decode('utf-8')) tcp_client.close()
server类 处理链接 "BaseServer", "TCPServer", "UDPServer" "UnixStreamServer", "UnixDatagramServer" request类 处理通信 "BaseRequestHandler", "StreamRequestHandler", "DatagramRequestHandler",

1 #服务端 2 import socketserver 3 4 class MyServer(socketserver.BaseRequestHandler): 5 def handle(self): 6 print(self.request) 7 print('收到客户端的消息是',self.request[0]) 8 self.request[1].sendto(self.request[0].upper(),self.client_address) 9 10 11 if __name__ == '__main__': 12 s=socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyServer) #多线程 13 s.serve_forever() 14 15 #客户端 16 from socket import * 17 ip_port=('127.0.0.1',8080) 18 buffer_size=1024 19 20 udp_client=socket(AF_INET,SOCK_DGRAM) #数据报 21 22 while True: 23 msg=input('>>: ').strip() 24 udp_client.sendto(msg.encode('utf-8'),ip_port) 25 26 data,addr=udp_client.recvfrom(buffer_size) 27 # print(data.decode('utf-8')) 28 print(data)
行走世间,全是妖怪