多个线程可以使用同一个端口吗
我正在尝试用Python写一个多线程的服务器,这个服务器可以接收多个客户端的请求,然后通过UDP数据包(使用53号端口)发送答案。我想知道这些线程是否可以同时使用53号端口。非常感谢!(这个问题可能听起来有点傻,我还是个初学者)
2 个回答
-1
请不要这样做。使用Twisted吧。它已经把这些东西都做好了。
5
如果你选择了“重用端口”的选项,那么是的,你可以把多个监听套接字绑定到同一个端口。不过根据我的经验,即使这样做,通常也只有一个套接字会接收到特定的数据包(除非你在接收多播数据包)。
mySocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
通常来说,当你提到“多线程服务器”时,指的是一种使用“面向连接”的协议(比如TCP,而不是UDP)的服务器。在这种情况下,会有一个服务器套接字在监听连接,当有连接建立时,它会创建一个线程来处理这个连接。
对于一个多线程的UDP服务器,你可能会有一个单独的套接字来排队接收请求,然后有多个线程从队列中取出请求并处理。线程本身不需要直接处理套接字。
(注意:根据你的平台,你可能需要使用SO_REUSEADDR。更多信息可以在这里找到。)