python3 socketserver
1.socket并不能实现并发,只能是一对一。
2.使用socketserver实现并发:
(1)首先 创建一个请求处理的类,这个类要继承BaseRequestHandler并且还要重写父类里handle()方法(哈哈哈,因为源码里面pass)
(2)必须实例化 TCPServer,并且传递server IP和上面创建的请求处理类,给这个TCPServer;
(3)server.handle_requese()#只处理一个请求,server.server_forever()处理多个一个请求,永远执行
(4)关闭连接server_close()
1 __author__ = 'Administrator' 2 import socketserver 3 ip_port=('127.0.0.1',8080) 4 buff_size=1024 5 6 class Myserver(socketserver.BaseRequestHandler): 7 def handle(self): 8 try: 9 print(self.request)#conn 10 print(self.client_address)#addr 11 while True: 12 data=self.request.recv(buff_size) 13 if not data:break 14 print('收到的消息是:',data) 15 self.request.sendall(data.upper()) 16 except Exception as e: 17 print(e) 18 19 if __name__=='__main__': 20 s=socketserver.ThreadingTCPServer(ip_port,Myserver) #多线程 21 # s=socketserver.ForkingTCPServer(ip_port,MyServer) #多进程 22 s.serve_forever()
1 __author__ = 'Administrator' 2 from socket import * 3 ip_port=('127.0.0.1',8080) 4 back_log=5 5 buffer_size=1024 6 7 tcp_client=socket(AF_INET,SOCK_STREAM) 8 tcp_client.connect(ip_port) 9 10 while True: 11 msg=input('>>: ').strip() 12 if not msg:continue 13 # if msg == 'quit':break 14 15 tcp_client.send(msg.encode('utf-8')) 16 17 data=tcp_client.recv(buffer_size) 18 print('收到服务端发来的消息:',data.decode('utf-8')) 19 20 tcp_client.close()
1 __author__ = 'Administrator' 2 from socket import * 3 ip_port=('127.0.0.1',8080) 4 back_log=5 5 buffer_size=1024 6 7 tcp_client=socket(AF_INET,SOCK_STREAM) 8 tcp_client.connect(ip_port) 9 10 while True: 11 msg=input('>>: ').strip() 12 if not msg:continue 13 if msg == 'quit':break 14 15 tcp_client.send(msg.encode('utf-8')) 16 17 data=tcp_client.recv(buffer_size) 18 print('收到服务端发来的消息:',data.decode('utf-8')) 19 20 tcp_client.close()
1 import socketserver 2 class MyServer(socketserver.BaseRequestHandler): 3 def handle(self): 4 print(self.request) 5 print('收到客户端的消息是',self.request[0]) 6 self.request[1].sendto(self.request[0].upper(),self.client_address) 7 if __name__ == '__main__': 8 s=socketserver.ThreadingUDPServer(('127.0.0.1',8081),MyServer) #多线程 9 s.serve_forever()
1 __author__ = 'Administrator' 2 from socket import * 3 ip_port=('127.0.0.1',8081) 4 buffer_size=1024 5 udp_client=socket(AF_INET,SOCK_DGRAM) 6 while True: 7 msg=input('>>>>:') 8 udp_client.sendto(msg.encode('utf-8'),ip_port) 9 data,addr=udp_client.recvfrom(buffer_size) 10 print('收到服务端发来的消息:',data)
1 __author__ = 'Administrator' 2 from socket import * 3 ip_port=('127.0.0.1',8081) 4 buffer_size=1024 5 udp_client=socket(AF_INET,SOCK_DGRAM) 6 while True: 7 msg=input('>>>>:') 8 if not msg:continue 9 if msg==quit:break 10 udp_client.sendto(msg.encode('utf-8'),ip_port) 11 data,addr=udp_client.recvfrom(buffer_size) 12 print('收到服务端发来的消息:',data)

浙公网安备 33010602011771号