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)
socketserver分析udp版

 

 

 

 

 

posted @ 2018-08-14 17:42  一只小妖  阅读(143)  评论(0)    收藏  举报