【发布时间】:2012-11-04 02:13:27
【问题描述】:
我正在编写一个应用程序,它使用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是同步的,所以你发布的代码很好,除了你应该修改你的循环以检查Terminated像while not Terminated and not IsConnected do这样的线程的标志,除了你可以进入无限连接尝试循环。但是在调用TcpClient.Connect;后无法到达IsConnected := True;行,连接失败。 -
将条件更改为
while (not IsConnected) and (not Terminated) do并不能修复错误(尝试过)。 -
我知道,这只是建议您应该如何修改该循环 :-) 我看不到任何 错误。你调试过这段代码吗?我敢打赌,如果您尝试连接到不存在的服务器,那么您将永远无法到达在
IsConnected := True;行(使用当前代码)设置的断点。 -
是的,我正在调试器中运行代码。问题是如何以编程方式检测服务器不可用。
-
不,此时的问题是我怎样才能修改代码,以便在except子句中捕获异常?答案是什么Don '不要修改代码,连接尝试异常已经被捕获.
标签: delphi delphi-2009 indy