4

C#では、ソケット接続が終了すると、リンクを終了する前に他のノードにこのことが通知されるため、残りのノードは接続ステータスを更新できます。

Javaでは、通信リンクを終了すると、他のノードが接続を有効として報告し続けます。

読み取り中に-1を受信したときに接続が失われたことを報告する読み取りサイクル(理にかなっている)を実装する必要がありますか(C#ではこれは0だと思います)?

あなたの洞察力に感謝します。

編集:あなたの両方に感謝します。私が疑って私の投稿で述べたように、接続の接続状態を確認するには追加のチェックが必要です。

4

2 に答える 2

2

接続のリモート側がなくなった場合、切断が検出された場合、通常は InputStream/InputChannel から IOException を取得します。切断を検出できない場合、ソケットの読み取りがタイムアウトしたときに最終的に IOException がスローされます。タイムアウトを待つ時間の長さは、Socket.setSoTimeout() を使用して調整できます。

于 2010-05-10T21:06:36.517 に答える
0

Java では、ソケットとの間で読み取り/書き込みを行う場合、または入力ストリームの状態を照会する場合 (例: InputStream.available()) にのみ、ソケットのもう一方の端が閉じていることがわかります。もう一方の端が閉じているという非同期通知はないと思います。

ソケットがまだ開いていることをどのようにテストしていますか?

メソッドをポーリングして、InputStream.available()-1 が返された場合は、ソケットが閉じられていることがわかります。もちろん、用途に合わせてデータを読み取ることもできます。

InputStream.available()を参照してください

于 2010-05-10T21:06:31.597 に答える