【问题标题】:Detect TCP connection/disconnection in Delphi在 Delphi 中检测 TCP 连接/断开连接
【发布时间】:2013-05-19 07:15:21
【问题描述】:

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

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

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

【问题讨论】:

标签: delphi networking tcp delphi-7 indy


【解决方案1】:

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

【讨论】:

  • 客户端成功连接到服务器后,然后断开连接,因此我无法使用 MaxConnections
  • 他们在连接后断开连接,但您想将它们留在您的列表中?这没有多大意义。请更新您的问题以明确您的服务器的实际要求。
【解决方案2】:

两种解决方案:

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

【讨论】:

    【解决方案3】:

    这基本上取决于您的应用程序以及使客户端与众不同的原因。检测唯一客户端的一种方法是客户端 IP 地址。如果多个客户端可以从同一个 IP 地址连接,您需要为每个客户端设置一个唯一的 ID,然后在连接到服务器时,客户端需要将其客户端 ID 传送给服务器,服务器将存储它并在新连接时验证它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-10
      • 2014-01-24
      • 2013-06-23
      • 2020-07-04
      • 1970-01-01
      • 2013-11-16
      • 2019-04-27
      • 2013-11-22
      相关资源
      最近更新 更多