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() #讓服務端一直接受鏈接