我正在編寫一個應用程序,它使用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