Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中检查连接是否仍然有效?_Python_Sockets_Connection - Fatal编程技术网

如何在Python中检查连接是否仍然有效?

如何在Python中检查连接是否仍然有效?,python,sockets,connection,Python,Sockets,Connection,我一直在尝试制作一个多个客户端都可以连接的服务器,但我遇到了一个问题。我有一个包含所有当前连接目标的列表,我想检查它们是否仍然存在,而不必手动连接到它们 这是我编写的类中的侦听器方法: def listenForConnections(self): self.s.bind((self.HOST, self.PORT)) while True: self.s.listen(128) c, addr = self.s.

我一直在尝试制作一个多个客户端都可以连接的服务器,但我遇到了一个问题。我有一个包含所有当前连接目标的列表,我想检查它们是否仍然存在,而不必手动连接到它们

这是我编写的类中的侦听器方法:

def listenForConnections(self):
        self.s.bind((self.HOST, self.PORT)) 
        while True:
            self.s.listen(128)
            c, addr = self.s.accept()
            self.c = c
            print("\n[+]Got a new connection!")
            self.conns.append(c)

如您所见,它将一个新的连接对象附加到一个列表中,然后您可以从该列表中使用同一个类的getTarget()方法选择一个目标,但我不会将其粘贴到这里,因为您可能知道它的外观。请记住,侦听器在单独的线程中运行。现在我想写一个ping()函数,它每隔几秒钟检查一次conns列表中的所有连接是否仍然存在,但我不知道如何做。我认为在ping方法中,我必须每隔几秒钟向客户端发送一些数据,但我担心这会破坏整个程序,因为客户端可能认为这是用户发送的有效命令,而不是检查连接是否活动的垃圾。

如果要使用ping消息来检测客户机仍然处于活动状态,那么您必须在客户机/服务器协议中对此进行规定。正如您已经指出的,客户端必须能够看到它是一条PING消息,而不是一条“正常”消息。仅当您可以更改客户机/服务器协议时,此选项才有效。如果客户机/服务器协议严格基于请求/响应,那么这将更难实现,因为现在服务器也可以启动消息

还有其他选择:

  • 如果客户端正确关闭连接,服务器可以在下次尝试与客户端通信时确定这一点
  • 如果客户机通常连续发送请求,则可以假定客户机已死亡,并在客户机有一段时间未发送新请求时关闭连接
  • 您可以使用来检测死机客户端
可能的副本