sMa*_*Mah 2 delphi indy tcpclient delphi-2010 indy10
我在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;
Run Code Online (Sandbox Code Playgroud)
但有一点,我遇到了异常,它根本无法连接。我不确定自己在做什么错。
我应该这样做吗?
如果是这样,有人可以为我提供一种正确执行方法的方法吗?
另外,在我的编码中还有另一个功能可以重新连接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;
Run Code Online (Sandbox Code Playgroud)
通过以上两种编码,程序可以很好地处理重新连接和重置连接。但是有些时候程序根本无法重新连接或重置连接。
亲切的问候,
Connected()根本不应该提出任何例外。如果是这样,则可能是一个错误。请提供一个堆栈跟踪显示。
最好的选择是尽可能地避免使用Connected()。当您需要执行I / O操作时,只需执行此操作,并在发生故障时让Indy引发异常。然后您可以在那时处理它,例如:
try
IdTCPClient.DoSomething...
except
on E: EIdException do begin
Reconnect;
end;
end;
procedure Reconnect;
var
k: Integer;
begin
IdTCPClient.Disconnect;
if IdTCPClient.IOHandler <> nil then
IdTCPClient.IOHandler.InputBuffer.Clear;
for k := 0 to 4 do
begin
Sleep(1000);
try
IdTCPClient.Connect;
Exit;
except
on E: Exception do
begin
MessageDlg('Connecting Error: '+E.Message, mtError, [mbOk], 0);
if k = 4 then
raise;
end;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9950 次 |
| 最近记录: |