为什么Java一遍又一遍地从断开的套接字读取相同的字节?

时间:2016-12-02 17:55:25

标签: java sockets

当客户端等于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也无法解决问题。客户端应如何检测服务器故障?

3 个答案:

答案 0 :(得分:3)

它根本不读任何东西。 input.read(magicWord)返回-1。自上一次读取(0xFF方法未清除缓冲区)以来,缓冲区中有read个字节。

答案 1 :(得分:1)

read的调用返回读取的字节数。您不检查该结果。

并且您不清除读取缓冲区 - 因此您始终看到相同的字节。

答案 2 :(得分:0)

你的代码错了。

您必须检查read来电的返回值。在文档中查找并相应地编写代码。