gpt4 book ai didi

java - 为什么 Java 会一遍又一遍地从损坏的套接字读取相同的字节?

转载 作者:行者123 更新时间:2023-12-01 18:01:00 25 4
gpt4 key购买 nike

客户端在循环中读取状态字节,当它等于0x01时:

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 也不能解决问题。客户端应该如何检测服务器故障?

最佳答案

它根本不读取任何内容。 input.read(magicWord) 返回-1。自上次读取以来,您的缓冲区中有 0xFF 字节(read 方法不会清除缓冲区)。

关于java - 为什么 Java 会一遍又一遍地从损坏的套接字读取相同的字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40938249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com