2015-02-05 298 views
0

我想用Python實現UDP服務器。多客戶端UDP服務器python

我希望能夠等待一些客戶同時連接和與他人聊天。

我試圖用一個SocketServer的實施

import SocketServer 

class MyUDPHandler(SocketServer.BaseRequestHandler): 

    def handle(self): 
     data = self.request[0].strip() 
     socket = self.request[1] 
     print("{} wrote:".format(self.client_address)) 
     print("data -> ", data) 

     socket.sendto(data.upper(), self.client_address) 

if __name__ == "__main__": 
    HOST, PORT = "localhost", 9999 
    server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler) 
    server.serve_forever() 

使用這種實現,我可以給不同的客戶端數據到這個服務器。

要說清楚的是,當客戶端向服務器發送UDP數據以便能夠與他通信時,我想要做的是進入另一個功能。但同時,我仍然希望其他客戶端能夠發送UDP數據。我想多線程將是一個解決方案?

我不確定要清楚...

回答

2

UDP是無連接的。因此,您只需使用單一的SocketServer即可接收來自多個客戶端的消息,並使用client_address將客戶端彼此區分開來。您不需要線程或多個進程。

因爲它是一個聊天服務器,傳出的消息可能總是在響應傳入的,但如果你希望能夠發送垃圾郵件,以及,你應該handle_request()取代serve_forever()__init__()設置self.timeout。這樣你可以檢查是否需要定期執行額外的動作,例如一分鐘一次,你可以發送心跳或任何東西。