それは0x01のと同じである一方で、クライアントは、ループ内のステータスバイトを読み取りますなぜJavaは同じソケットを何度も何度も読んでいますか?
do {
input.read(magicWord); // ALWAYS THE SAME BYTE AFTER THE SERVER IS GONE
if (magicWord[0] == (byte) 0xFF)
break;
// retrieve the progress
byte[] cur = new byte[4];
input.read(cur);
// and set the progress bar
progressBar.setValue(ByteBuffer.wrap(cur).getInt());
} while (!isCancelled());
しかし、サーバがクラッシュした場合(SIGKILLによって例えば)クライアントはこのループでありながら、クライアントが最後に取得し続けますmagickWord
はサーバーから何度も何度も送信されます(無限ループに入ります)。 SO_TIMEOUT
に設定しても問題は解決しません。クライアントはどのようにサーバー障害を検出する必要がありますか?
ありがとうございます、私の問題を解決しますが、サーバーがなくなったときに実際に-1を返します。 奇妙なことに、例外はスローされません。 – milos
はい。私は「-1」の間違いを反映するように答えを変えます。 – talex
@milosそれは*奇妙ではありません。**予想される**動作です。あなたの目的のために*前提*を作成しないように、前もって学んでください。 – GhostCat