多客户端 UDP 服务器 python
Multi-client UDP server python
我想用 Python 实现一个 UDP 服务器。
我希望能够等待一些客户端连接并同时与其他客户端聊天。
我尝试使用 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数据。我想多线程将是一个解决方案?
我不是很清楚...
UDP 是无连接的。因此,您可以仅使用您拥有的单个 SocketServer
接收来自多个客户端的消息,并使用 client_address
区分客户端。您不需要线程或多个进程。
由于它是聊天服务器,传出消息可能总是响应传入消息,但如果您也希望能够发送未经请求的消息,则应将 serve_forever()
替换为 handle_request()
并在 __init__()
中设置 self.timeout
。这样您就可以检查是否需要定期执行额外的操作,例如一分钟一次,你可以发送心跳或其他任何东西。
我想用 Python 实现一个 UDP 服务器。
我希望能够等待一些客户端连接并同时与其他客户端聊天。
我尝试使用 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数据。我想多线程将是一个解决方案?
我不是很清楚...
UDP 是无连接的。因此,您可以仅使用您拥有的单个 SocketServer
接收来自多个客户端的消息,并使用 client_address
区分客户端。您不需要线程或多个进程。
由于它是聊天服务器,传出消息可能总是响应传入消息,但如果您也希望能够发送未经请求的消息,则应将 serve_forever()
替换为 handle_request()
并在 __init__()
中设置 self.timeout
。这样您就可以检查是否需要定期执行额外的操作,例如一分钟一次,你可以发送心跳或其他任何东西。