gpt4 book ai didi

delphi - TIdTCP客户端 : Reconnect implementation

转载 作者:行者123 更新时间:2023-12-03 15:29:08 25 4
gpt4 key购买 nike

我正在编写一个应用程序,它使用 TIdTCPClient 通过套接字与另一个应用程序进行通信。

我希望应用程序尝试连接到某个服务器,直到建立连接(即直到服务器上线)。

为了做到这一点,我编写了以下代码:

procedure SendingThread.Execute();
var
I : integer;
Test : string;
IsConnected : Boolean;
begin
TcpClient := TIdTCPClient.Create;
TcpClient.Host := '127.0.0.1';
TcpClient.Port := 9999;
TcpClient.ConnectTimeout := 60000;

IsConnected := false;
while not IsConnected do
begin
try
TcpClient.Connect;
IsConnected := True;
except
on E:EIdSocketError do
IsConnected := false;
end;
end;
...
end;

当我在服务器离线的情况下运行此代码时,我收到 EIdSocketError ,错误代码为 10061。在TcpClient.Connect;之后抛出异常。

如何修改代码以便在 except 原因中捕获此异常?

最佳答案

您显示的代码是处理重新连接问题的正确方法,但您需要对其进行一个小更改。更改 except block 以捕获 ExceptionEIdException 而不是 EIdSocketErrorEIdSocketError 并不是 Connect() 可能引发的唯一异常。例如,它可能引发 EIdConnectExceptionEIdConnectTimeout,这两者都不是从 EIdSocketError 派生的。

procedure SendingThread.Execute;
var
...
IsConnected : Boolean;
begin
...
IsConnected := False;
while (not IsConnected) and (not Terminated) do
begin
try
TcpClient.Connect;
IsConnected := True;
except
on E: Exception do
IsConnected := False;
end;
end;
...
end;

您也可以完全删除 on E 子句,因为它没有做任何有用的事情。引发异常时,IsConnected 变量已经为 False,因此无需将其重新分配给相同的值。

procedure SendingThread.Execute;
var
...
IsConnected : Boolean;
begin
...
IsConnected := false;
while (not IsConnected) and (not Terminated) do
begin
try
TcpClient.Connect;
IsConnected := True;
except
end;
end;
...
end;

关于delphi - TIdTCP客户端 : Reconnect implementation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13398196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com