Socketserver

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

發佈了51 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章