首页 > 解决方案 > 使用 read() 时 BufferReader 卡住

问题描述

我开发了一个小型 Java 客户端,它假设与安装在 unix-server 上的工具进行通信。我第一次使用 Socket,所以可能会做错什么。我也仅限于 Java 6。

简而言之,代码如下所示

我使用 Socket 建立连接。

Socket socket = new Socket();
SocketAddress socketAddress = new InetSocketAddress(endpoint, port);
socket.connect(socketAddress, 5000);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

这是我发送消息的方式

out.println("Hello");
out.flush();

这是我阅读回复的方式

String res = "";
int letter;
while(letter = in.read() != -1) {
    char c = (char) letter;
    res += c;
}

Fx 如果我发送消息“你好”,我将收到 2 行的答案(参见下面的示例)

> Hi there
> My name is Robot

当我在“Robot\n”之后读取下一个字符时,事情卡住了,我预计 in.read() != -1 将是真的,因此它会自行停止,但事实并非如此,而是一切都卡住了。

这可能是什么原因以及如何解决?谢谢。

如果我需要提供更多信息,请告诉我。

标签: javaserversocket

解决方案


我必须在读取之前关闭我的输出编写器,否则它会阻塞。

if (!socket.isOutputShutdown()) {
    socket.shutdownOutput();
}

答案来自后来删除自己答案的人:-/


推荐阅读