socketserver模块能实现TCP的并发,其中主要包括两大类
1.server类:负责链接
["BaseServer","TCPServer","UDPServer","ThreadingUDPServer","ThreadingTCPServer","ForkingUDPServer","ForkingTCPServer","UnixStreamServer","UnixDatagramServer","ThreadingUnixStreamServe","ThreadingUnixDatagramServer"]
2.requst类:负责通信
["BaseRequestHandler", "StreamRequestHandler","DatagramRequestHandler"]
3.并发类:
["ForkingMIxIn","ThreadingMixIn"]
他们的继承关系为
实现TCP并发
import socketserver
#通信
class Myserver(socketserver.BaseRequestHandler):#必须定义一个自己的函数,并且继承socketserver.BaseRequestHandler
def handle(self): #必须定义handle函数
print('self.request是',self.request) #self.request相当于conn,addr=socket.accept()中的conn
print('self.client_address是',self.client_address) #self.clien_address就是客户端的地址
while True:
data=self.request.recv(1024) #进行通信
print('the message is',data)
self.request.send(data.upper())
if __name__=='__main__':
#链接
s=socketserver.ThreadingTCPServer(('10.11.165.103',800),Myserver)#ThreadingTCPServer实现并发必须传入两个参数(服务端地址与端口,自己定义的类)
s.serve_forever() #让服务端一直接受链接
实现UDP并发
import socketserver
#通信
class Myserver(socketserver.BaseRequestHandler):#必须定义一个自己的函数,并且继承socketserver.BaseRequestHandler
def handle(self): #必须定义handle函数
print('self.request是',self.request) #与TCP不同,UDP中的self.request是个元组(data,obj.socket)第一个是收到的消息,第二个是UDP的套接字
print('self.client_address是',self.client_address) #self.clien_address就是客户端的地址
while True:
print(self.request[0]) #收到的消息
data=self.request[1].recv(1024) #进行通信
print('the message is',data)
self.request[1].send(data.upper())
if __name__=='__main__':
#链接
s=socketserver.ThreadingUDPServerServer(('10.11.165.103',800),Myserver)#ThreadingTCPServer实现并发必须传入两个参数(服务端地址与端口,自己定义的类)
s.serve_forever() #让服务端一直接受链接