gpt4 book ai didi

java - BufferedReader readLine 检测关闭的套接字并使用 .ready()

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

服务器片段:

reader = new BufferedReader(new InputStreamReader(new BufferedInputStream(connection.getInputStream())));
if (reader.ready()) {
result = reader.readLine();
if (result == null) {
quit(); // handle closing the socket
} else {
// process result
}
}

客户端片段:

BufferedOutputStream os = new BufferedOutputStream(connection.getOutputStream());
OutputStreamWriter osw = new OutputStreamWriter(os, "US-ASCII");
osw.write("hello\n");
osw.flush();

问题:

当客户端向服务器写入内容时,它会被正确读取,但是当客户端关闭其套接字(例如强制退出程序)时,reader.readLine() 应该输出 null ,因为 if (reader.ready()) { 空结果永远不会到达 quit()。如果我忽略 if (reader.ready()) {,服务器将无法读取数据。

我该如何解决这个问题?

编辑:我不能使用 while ((result = reader.readLine()) != null) { 因为我需要在之后运行更多代码,如下所示:

while (running) {
try {
reader = new BufferedReader(new InputStreamReader(new BufferedInputStream(connection.getInputStream())));
if (reader.ready()) {
result = reader.readLine();
if (result == null) quit();
else // process result
}
catch (Exception e) { ... }

// more code
}
}

最佳答案

只需删除ready()测试即可。它是如此简单。 read() 不是流结束的测试。 readLine() 在没有数据时会阻塞。

并且您必须在读取循环之外创建一次 BufferedReader。否则您将丢失数据。

关于java - BufferedReader readLine 检测关闭的套接字并使用 .ready(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19212244/

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