bufferreader在使用read()时阻塞

oxf4rvwz  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(275)

我开发了一个小型java客户机,它可以与安装在unix服务器上的工具进行通信。我第一次使用socket,所以可能会出错。我也仅限于Java6。
简而言之,代码如下所示
我使用套接字建立连接。

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、 如果我发送一条信息“你好”,我将收到两行的答案(见下面的例子)

> Hi there
> My name is Robot

当我读到“robot\n”之后的下一个字符时,这些东西卡住了,我希望在.read()中是这样-1将是真的,因此它将停止自己,但这不是一个情况,相反,一切只是卡住。
这可能是什么原因?如何解决?谢谢。
请让我知道如果我需要提供更多的信息。

7xzttuei

7xzttuei1#

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

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

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

相关问题