当客户端等于0x01时,客户端读取循环中的状态字节:
${SOURCE_FILES}
但是如果服务器在客户端处于此循环中时崩溃(例如通过SIGKILL),则客户端会不断地获取服务器一次又一次发送的最后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());
(并进入无限循环)。即使设置magickWord
也无法解决问题。客户端应如何检测服务器故障?
答案 0 :(得分:3)
它根本不读任何东西。 input.read(magicWord)
返回-1
。自上一次读取(0xFF
方法未清除缓冲区)以来,缓冲区中有read
个字节。
答案 1 :(得分:1)
对read的调用返回读取的字节数。您不检查该结果。
并且您不清除读取缓冲区 - 因此您始终看到相同的字节。
答案 2 :(得分:0)
你的代码错了。
您必须检查read
来电的返回值。在文档中查找并相应地编写代码。