ホームページ > Java > &#&チュートリアル > Java でリモート ソケットのクローズを確実に検出するにはどうすればよいですか?

Java でリモート ソケットのクローズを確実に検出するにはどうすればよいですか?

DDD
リリース: 2024-12-26 00:57:10
オリジナル
576 人が閲覧しました

How Can I Reliably Detect a Remote Socket Closure in Java?

Java ソケット API を使用した接続の切断の判断

Java のソケット API を使用する場合、接続がいつ切断されたかを検出するのが困難な場合があります。ローカル ソケットの状態を示すだけの isConnected() や isClosed() などのメソッドとは異なり、リモート ソケットのステータスを判断する組み込み API はありません。

この制限に対処するために、推奨されるアプローチにはモニタリングが含まれます。 I/O 操作。 read() が -1 を返した場合、readLine() が null を返した場合、または readXXX() が EOFException をスローした場合は、ピアが正常に接続を閉じた可能性があります。

接続が突然終了した場合、書き込みを実行すると、「ピアによって接続がリセットされた」ことを示す IOException が発生する場合があります。読み取り操作も同様の例外で失敗する可能性があります。

あるいは、読み取りタイムアウトを使用して、ピアが接続されたままで非アクティブであることを検出できます。

ClosedChannelException と SocketException: ソケットが閉じられていることに注意することが重要です。これは、接続が閉じられたことを意味するのではなく、ローカルで閉じられたチャネルを使用しようとする試みを意味します。

特定のシナリオではWindows XP 上の Java 7 では、SelectionKey の有効性を監視すると、接続のリセットが判明する可能性があります。ただし、この動作は、異なるプラットフォームまたは JRE バージョン間で保証されるわけではありません。

以上がJava でリモート ソケットのクローズを確実に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート