在Delphi中检测TCP连接/断开连接

时间:2013-05-19 07:15:21

标签: delphi networking tcp delphi-7 indy

我的应用程序有一个包含StringGrid的服务器表单。服务器只允许一次连接4个客户端。当列表未满时,它将从客户端添加任何tcp连接。

当新客户端从服务器请求TCP连接并且列表已满时,服务器应检查此列表中的客户端以查看它们是否仍然连接。如果客户端仍然连接且列表已满,请拒绝新客户端。如果不再连接一个或多个客户端,请接受新客户端,将其添加到列表并更新列表。

如何知道客户端是否仍然连接?

3 个答案:

答案 0 :(得分:6)

在新客户端想要连接时,您不应该检查死客户端。您应该将服务器的MaxConnections属性设置为4,以防止列表已满时新连接,无论已连接客户端的状态如何,然后在使用协议级心跳或tcp连接时定期检查死客户端级别的Keepalive。如果心跳/保持活动错误或超时,请断开该客户端并将其从列表中删除,从而允许新客户端进行连接。

答案 1 :(得分:1)

两种解决方案:

  • 您在协议中添加了“客户端标识符”的概念
  • 您决定通过其IP地址识别“客户端”(套接字将其提供给您)。

答案 2 :(得分:1)

它基本上取决于您的应用程序以及客户端的独特之处。检测唯一客户端的一种方法是客户端IP地址。如果多个客户端可以从相同的IP地址连接,则需要为每个客户端提供唯一的ID,然后在连接到服务器时,客户端需要将其客户端ID传递给将存储它的服务器,并在新连接验证它时。