BufferReader 在使用 read() 时卡住

BufferReader stucks when using read()

我开发了一个小型 java 客户端,它可以与安装在 unix 服务器上的工具进行通信。 我是第一次使用 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;
}

F.x。如果我发送消息“你好”,我将收到 2 行的答复(请参见下面的示例)

> Hi there
> My name is Robot

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

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

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

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

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

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