如何快速有效地判断一个TCP连接是否还有效? ( 积分: 100 )

  • 主题发起人 主题发起人 fenghai4690
  • 开始时间 开始时间
F

fenghai4690

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个客户端从一个监控设备取数据,两者之间用tcp连接。我每隔1分钟向监控设备发命令,取数据。代码如下:
comand:='getdata';
idtcpClient1.IOHandler.Write(comand);
a:=round(idtcpClient1.IOHandler.ReadSmallInt(false));
问题是如果监控设备由于某种原因(断电、重启等)异常断开了连接,这时候程序执行到最后一句是会出现较长时间的等待。有没有什么方法能够快速的判断tcp连接是否有效?
而且在取数据失败后,我尝试断开后重连,但也有错误,代码如下:
try
上面取数据的代码
except
idtcpClient1.Disconnect; //报错:socket error #10054 connection reset by peer
idtcpClient1.Connect;
end;
 
我写了一个客户端从一个监控设备取数据,两者之间用tcp连接。我每隔1分钟向监控设备发命令,取数据。代码如下:
comand:='getdata';
idtcpClient1.IOHandler.Write(comand);
a:=round(idtcpClient1.IOHandler.ReadSmallInt(false));
问题是如果监控设备由于某种原因(断电、重启等)异常断开了连接,这时候程序执行到最后一句是会出现较长时间的等待。有没有什么方法能够快速的判断tcp连接是否有效?
而且在取数据失败后,我尝试断开后重连,但也有错误,代码如下:
try
上面取数据的代码
except
idtcpClient1.Disconnect; //报错:socket error #10054 connection reset by peer
idtcpClient1.Connect;
end;
 
请问如何最快的判断该连接已经失效?等待超时太慢了,而且我设置了idtcpclient1.IOHandler.ReadTimeout:=10;但是等它报错还是要1分多钟!为什么啊
 
请问如何最快的判断该连接已经失效?等待超时太慢了,而且我设置了idtcpclient1.IOHandler.ReadTimeout:=10;但是等它报错还是要1分多钟!为什么啊
 
后退
顶部