我一直在尝试切断多个客户端可以连接的服务器,但遇到了问题。我有一个列表,其中列出了所有当前连接的目标,我想检查它们是否仍然存在,而不必手动连接它们。
这是我编写的类中的侦听器方法:
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方法中,我必须每隔几秒钟向客户端发送一些数据,但是我担心它会破坏整个程序,因为它可能是客户端认为这是用户发送的有效命令,而不是一些垃圾检查连接是否处于活动状态。
答案 0 :(得分:0)
如果要使用PING消息来检测客户端是否仍在运行,则必须在客户端/服务器协议中提供此信息。正如您已经提到的,客户端必须能够看到它是PING消息,而不是“正常”消息。仅当您可以更改客户端/服务器协议时,这才有效。如果客户端/服务器协议严格基于请求/响应,则实现起来比较困难,因为现在服务器也可以启动消息。
还有其他选择: