1

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

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

当客户端关闭它的客户端 (Alt+F4) 并且有人与 em 交谈时会出现问题,导致套接字抛出 10054 错误,“套接字连接重置”。我认为在 UDP 中不会出现这种情况。客户端线程上的“谈话”方法也在 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))

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

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

谢谢阅读 ;)

4

1 回答 1

1

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

于 2010-01-10T00:46:39.053 回答