我在 Delphi 的 Indy 中遇到了IdTCPclient.connected函数的问题。我正在使用 Indy10 和 Delphi2010 环境。我的问题是每次我检查与IdTCPclient.connected的 TCP 连接时,它都会引发异常,并出现这些错误EidSocketError,EidReadTimeOut。有什么方法可以断开连接并重新连接?(如重置连接)。
注意:我设置 TCPClient.ReTimeout:= 30000;
重置连接的实现编码如下。
if IdTCPclient.connected then
begin
IdTCPclient.IOHandler.InputBuffer.Clear;
IdTCPclient.Disconnect;
end;
sleep(1000);
try
IdTCPclient.connect;
except
on E: Exception do
MessageDlg('Connecting Error: '+E.Message, mtError, [mbOk], 0);
end;
但有些时候,我得到了异常,它根本无法连接。我不确定我做错了什么。
我应该这样做吗?
- 先断开
- 清除输入缓冲区
- 销毁 TCPclient
- 重新创建新的 TCPclient
- 然后再次连接
如果是这样,有人可以为我提供一种如何正确执行此操作的方法吗?
此外,在我的编码中还有另一个功能可以重新连接 TCP。它也给了我例外。在向 TCP 发送消息之前,我会检查连接。如果没有连接,我会重新连接五次。
result := IdTCPclient.connected
if not result then
begin
for k:=0 to 4 do
beign
sleep(1000);
try
TCPclient.connect;
except
on E: Exception do
MessageDlg('Connecting Error: '+E.Message, mtError, [mbOk], 0);
end
result := TCPclient.connected;
if result then break;
end;
通过以上两种编码,程序可以很好地处理重新连接和重置连接。但在某些时候,程序根本无法重新连接或重置连接。
- 遇到异常应该怎么办?我应该从异常重新连接吗?
- 我们如何构建编码以定期检查连接?
- 我们如何构建编码以在连接丢失时恢复连接?
亲切的问候,