让我解释一下我正在做的应用程序。
我正在为多个并发客户端创建一个中央 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?
谢谢阅读 ;)