1

私のアプリは、TidTCPClient を使用してサーバーにデータを送信します。サーバーは TidTCPServer を使用します。すべて正常に動作し、予期しない状況に対処しようとしています。

サーバーとクライアントの間のネットワーク ケーブルを切断し、クライアントを閉じようとすると、最終的に閉じるまで長時間待機します。

TCPClient.IOHandler.InputBuffer.Clear;
TCPClient.Disconnect;
TCPClient.Free;

TCPClient.Free はそれが待機する場所です。これは 30 秒の場合もあれば、それ以上の場合もあります。

その瞬間に何をしていても、すぐに TCPClient を終了する方法はありますか?

4

2 に答える 2

1

InputBuffer前ではなく、呼び出した後にクリアする必要がありますDisconnect()

TIdTCPClientいずれにせよ、ソケットの LINGER オプションをいじっていない限り、ソケットを切断/解放するときにソケットがそのようなハングを引き起こす理由はありません。したがって、最初に自分のコードに問題があると思わなければなりません。どのバージョンの Indy を使用していますか? に割り当てられたイベント ハンドラはありTIdTCPClientますか? 実際に何が起こっているかを確認するために、デバッガーで TIdTCPClient のデストラクタをステップ実行してみましたか?

于 2011-03-25T01:50:40.720 に答える
0

おそらくタイムアウトを待ちます。コンポーネントのプロパティを確認して、タイムアウト値を下げます

于 2011-03-24T15:52:56.867 に答える