我正在编写一个应用程序,它使用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;
当我在服务器脱机时运行此代码时,我得到错误代码为10061的EIdSocketError.在TcpClient.Connect;之后抛出异常.
如何修改代码,以便在异常中捕获此异常?
不需要修改代码.*您的程序已经捕获了预期的异常.您所看到的是调试器在您的程序有机会看到异常存在并对其执行任何操作之前立即拦截异常.当IDE中断您时,它会显示一个对话框,为您提供继续运行的选项.执行该选项,或在关闭对话框后按“运行”按钮.
您可以将调试器配置为忽略部分或全部异常,这在使用Indy时特别有用,因为Indy倾向于使用异常进行正常流控制. How to do that has been covered here before.
* Remy的答案描述了您可以对代码进行的改进,以捕获其他可能的异常.