python之 socketserver模塊的使用


在我們正常的使用socket模塊來寫一個server的程序就會顯得比較的復雜通常一般流程為

  1.生成socket實例對象

  2.綁定地址

  3.開始監聽

  4.接收數據

一般demo為

# 服務器

import socket
server = socket.socket()  # 聲明socket類型,同時生成socket連接對象
server.bind(('localhost', 6969))   # 綁定要監聽的端口此時綁定的是本地
server.listen()  # 監聽  括號里面的就是最大允許鏈接
print('等待電話打進來')
coon, addr = server.accept()  # 等待    (此時上面加一個while 就可以多個電話打進來並且進行通話)
# coon 就是客戶端連過來而在服務器端為其生成的一個連接實例
# addr 就是地址
print('電話打進來了')
print(coon, addr)  # 將coon 與addr 顯示出來
while True:  # 此時就可以一直不停的發送數據了, 此時的效果就是一個電話可以無阻礙的通話
    # 如果此時沒有true的話就只能接收一次了
    data = coon.recv(1024)  # 接收數據
    print('recv:', data.decode())   # 此時注意我們需要吧接收的數據解碼,因為發過來的是byte類型
    coon.send(data.upper())  # 將數據里面的字母轉化為大寫發送
    server.close()

這就是一個單個接入,多次接收的server 

如果想用多個接入多個接收的話我們只需要在coon上加一個while即可 ,對與server來說一個coon就是喲個接入點

那么我們的socketserver又是方便在何處呢

對於socketserver來說我們只需要修改頭節點就可以了

我們需要新建立一個類在類里面修改 socketserver . BaseRequestHandler即可

在這個類中hand結束即代表 當前連接斷開 

import socketserver


class My_TCPhandler(socketserver.BaseRequestHandler):
    def handle(self):
        while True:
            try:
                self.data = self.request.recv(1024)
                print("{} wrote:".format(self.client_address[0]))
                print(self.data)
                self.request.send(self.data.upper())  # 服務器端到此結束
            except ConnectionResetError as e:
                print(e)
                break


HOST, POST = "localhost", 9999
server = socketserver.ThreadingTCPServer((HOST, POST), My_TCPhandler)
# 並發 TCPServer改成 ThreadingTCPServer 在Linux是建議使用Forking來開多線程
server.serve_forever()

server = socketserver.ThreadingTCPServer((HOST, POST), My_TCPhandler) 時就是開了多線程可以多個接入,多個實時接收與發送
這樣來看我們的的服務器端的程序是不是便捷了呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM