代码之家  ›  专栏  ›  技术社区  ›  Ragnagard

用于多个并发客户端的python-udp套接字选项(&C)

  •  1
  • Ragnagard  · 技术社区  · 16 年前

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

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

    当一个客户机关闭它的客户机(alt+f4)并且有人与em交谈时,问题就会出现,因为套接字抛出10054错误,“套接字连接重置”。我想,在UDP中是不可能的。 客户端线程上的“talk”方法也位于try&except标记之间,但仍然是UDP服务器“recvFrom”触发异常的服务器。

    我使用的是python 2.5(代码需要它)和这个socket选项:

    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?

    感谢阅读;)

    1 回复  |  直到 15 年前
        1
  •  1
  •   Andrew McGregor    16 年前

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

    推荐文章