gpt4 book ai didi

用于多个并发客户端的 Python UDP 套接字选项

转载 作者:太空宇宙 更新时间:2023-11-03 19:38:39 30 4
gpt4 key购买 nike

让我解释一下我正在做的应用程序。

我正在为多个并发客户端创建一个中央 UDP(必须是 UDP)服务器,这些客户端也在它们之间“交谈”。我检查已知客户端地址的字典,如果“我不知道”客户端,则创建一个客户端处理程序线程。否则,线程接收数据并完成其工作。新线程接收对套接字和调用者地址的引用,因此它们使用带有该地址和数据的 socket.sendTo。

当客户端关闭它的客户端(Alt+F4)并且有人与它们交谈时,就会出现问题,导致套接字抛出 10054 错误,“套接字连接重置”。我认为 UDP 中不会出现这种情况。客户端线程上的“talk”方法也在 try 和 except 标记之间,但触发异常的仍然是 UDP 服务器“recvfrom”。

我正在使用 Python 2.5(代码需要它)和此套接字选项:

host = "0.0.0.0"
port = 10000

UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
UDPSock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
UDPSock.bind((host,port))

有一些选项可以让我做我想做的事情,或者有一个库可以解决这些问题?

或者如果我做错了...有一种方法可以使用 UDP 来执行/模拟与线程 TCP 套接字相同的行为(在接受时创建一个新的客户端处理程序线程)?

感谢您的阅读;)

最佳答案

发生“套接字重置”是因为客户端发送了 ICMP 端口不可达,以响应发送到不再存在的套接字的数据报。在 API 中表达这一点的方式非常合理,因此您只需处理它即可。但如果您只是忽略异常,套接字应该仍然可以工作。

关于用于多个并发客户端的 Python UDP 套接字选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2035542/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com