Delphi の Indy のIdTCPclient.connected関数に問題があります。Indy10 と Delphi2010 環境を使用しています。私の問題は、 IdTCPclient.connected で TCP 接続をチェックするたびに、これらのエラーEidSocketError、EidReadTimeOutで例外が発生することです。接続を切断して再接続する方法はありますか? (接続をリセットするなど)。
注: TCPClient.ReTimeout:= 30000; を設定しました。
接続をリセットするために実装されたコーディングは次のとおりです。
if IdTCPclient.connected then
begin
IdTCPclient.IOHandler.InputBuffer.Clear;
IdTCPclient.Disconnect;
end;
sleep(1000);
try
IdTCPclient.connect;
except
on E: Exception do
MessageDlg('Connecting Error: '+E.Message, mtError, [mbOk], 0);
end;
しかし、ある時点で例外が発生し、まったく接続できませんでした。何が間違っているのかわかりません。
これを行う必要がありますか?
- 最初に切断する
- 入力バッファをクリア
- TCP クライアントを破棄する
- 新しい TCP クライアントを再作成する
- そして、もう一度接続します
もしそうなら、誰かがそれを適切に行う方法を教えてもらえますか?
また、コーディングで TCP を再接続する別の機能があります。それは私にも例外を与えます。メッセージをTCPに送信する前に、接続を確認します。接続がない場合は、5 回再接続します。
result := IdTCPclient.connected
if not result then
begin
for k:=0 to 4 do
beign
sleep(1000);
try
TCPclient.connect;
except
on E: Exception do
MessageDlg('Connecting Error: '+E.Message, mtError, [mbOk], 0);
end
result := TCPclient.connected;
if result then break;
end;
上記の 2 つのコーディングにより、プログラムは再接続を処理し、接続を適切にリセットします。しかし、ある時点で、プログラムは再接続または接続をまったくリセットできません。
- 例外が発生した場合はどうすればよいですか? 例外から再接続する必要がありますか?
- 接続を定期的にチェックするためのコーディングをどのように構築すればよいでしょうか?
- 接続が失われたときに接続を取り戻すためのコーディングをどのように構築すればよいでしょうか?
敬具、