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()
View Code
 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()
View Code
 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()
View Code
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()
View Code
 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)
View Code
 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)
View Code

 

posted @ 2018-10-14 17:43  小猪猪猪  阅读(165)  评论(0)    收藏  举报