如何找出TClientSocket是活跃的

时间:2014-05-25 09:40:32

标签: delphi delphi-xe

我的应用程序有一个TClientsocket正确连接到服务器 但是当服务器关闭并再次运行时 我的应用程序不知道连接到它

我使用此代码来解决问题

if not ClientSocke.active then
    begin
        clintsocke.open();
    end
else
    Exit();

但是此代码无法解决我的问题,并且活动属性始终为false 我该如何解决这个问题

1 个答案:

答案 0 :(得分:0)

检查Active=false会正常工作。但您也应该处理OnDisconnectOnError事件。特别是OnError,您可以Close()套接字。

此外,如果可能,您应该在通信协议中实现ping / keepalive,这样您就可以检测服务器何时停止响应命令。如果发送命令并收到套接字错误,请关闭套接字。如果发送命令但未及时收到响应,请关闭套接字。

如果无法做到这一点,那么您至少应该通过setsockopt()启用TCP keepalive,这样操作系统就可以报告停止响应的套接字上的错误。