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();
}
答案来自一个后来删除了自己答案的人:-/
我开发了一个小型 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();
}
答案来自一个后来删除了自己答案的人:-/