【问题标题】:Multi-client UDP server python多客户端UDP服务器python
【发布时间】:2015-02-05 14:20:37
【问题描述】:

我想用 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 数据。我猜多线程将是一个解决方案?

我不确定...

【问题讨论】:

    标签: python sockets udp


    【解决方案1】:

    UDP 是无连接的。因此,您可以仅使用您拥有的单个 SocketServer 接收来自多个客户端的消息,并使用 client_address 将客户端彼此区分开来。您不需要线程或多个进程。

    由于它是一个聊天服务器,传出的消息可能总是响应传入的消息,但如果您也希望能够发送未经请求的消息,则应将serve_forever() 替换为handle_request() 并将self.timeout 设置为__init__()。通过这种方式,您可以检查是否需要定期执行额外的操作,例如您可以每分钟发送一次心跳或其他任何信息。

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      相关资源
      最近更新 更多