gpt4 book ai didi

java - 如何检测套接字输入流的结束?

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

以下代码应检测到没有更多字节可供读取。然而,它只是挂起,直到客户端连接关闭。

服务器

        //...

StringBuilder builder = new StringBuilder(128);
byte[] buffer = new byte[1024];
int length = 0;

while ((length = socket.getInputStream().read(buffer)) != -1) {
System.out.println(length);
builder.append(new String(buffer));
System.out.println(builder.toString());
}

客户端

   //...

OutputStream stream = clientSocket.getOutputStream();
stream.write("LIST".getBytes());
stream.flush();

API 和之前对此类问题的回答指出 -1 应该表示没有要读取的字符,但是此循环写入:

  • 4

  • 列表

  • 挂起 20 秒,直到客户端关闭套接字并选择 -1 来终止循环。

我如何正确检测流中没有更多字符?

此后连接应保持打开状态。

我可以提前发送字节数或特殊字符,但是即使连接仍然处于 Activity 状态,是否可以检测到不再有任何内容可读取。

最佳答案

The API and the previous answer on such question states that -1 should mean that there are no characters to be read

我无法评论某些未引用的答案可能会说的话,但 API 文档没有说这样的事情。它说-1 在流结束时返回。当对等方关闭连接或关闭输出以进行输出时,套接字上的流就会结束,而不是在此之前。

-1不是消息结束指示符。

关于java - 如何检测套接字输入流的结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33290574/

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