我正在编写一个应用程序,它使用TIdTCPClient
通过套接字与另一个应用程序进行通信。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
中捕获此异常?
'TIdTCPClient.Connect'是同步的,所以你发布的代码是很好的,除了你应该修改你的循环来检查线程'终止'标志像''而不是终止,而不是IsConnected做'和除您可以进入无限连接尝试循环。但是,在调用'TcpClient.Connect;'之后,您无法到达'IsConnected:= True'行并且连接失败。 – TLama
将condition改为'while(不是IsConnected)和(不是Terminated)do'不会修复错误(尝试它)。 –
我知道,这只是对如何修改该循环的建议:-)我看不到任何*错误*。你有没有调试过这段代码?我敢打赌,我的代表500中,如果你试图连接到一个不存在的服务器,你永远不会到达'IsConnected:= True'行(用当前代码)设置的断点。 – TLama