2

Indy(TCPServer / Client)を使用してDelphi(2009)アプリを作成しました。そして、TCPServerのレベルで問題があります。クライアントがサーバーへの再接続をもう一度試行した場合にのみ、クライアントの切断(PCの再起動後)を検出します。アプリを段階的に実行しましたが、クライアントが(再起動後に)トップ再接続を試みると、サーバーは(サイレントだと思いますが)例外を発生させます:ピアによって接続がリセットされました。この例外が遅すぎる理由。

(スレッドリスターはすぐにはリリースされないと思います)

どう思いますか ?

4

1 に答える 1

3

これは、TCPプロトコルの低レベルの詳細です。デフォルトでは、キープアライブパケットを送信しません。これは、帯域幅を浪費するためです。したがって、接続の確認を求める何かが発生した場合にのみ、接続が切断されたことを認識します。(ただし、同じクライアントからの再接続がこれをトリガーする理由はわかりません。)

TCPに通常のキープアライブパケットを送信させて、切断を早期に発見することができます。Windowsでは、これはサーバーアプリケーションによってアクティブ化できますが、レジストリを介して構成されます(詳細についてはここを参照してください)。

また、クライアントまたはサーバーに時折ヌルパケット(特に何もしないパケット)を送信させることにより、プロトコルレベルでキープアライブメカニズムを実装できる場合があります。これには明らかに、使用しているプロトコルが、ある種の何もしない、または何もしない興味深いメッセージ(NOOP、STATUS、PING ...など)を定義する必要があります。

于 2010-07-28T13:28:12.210 に答える