java - 使用 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 将是真的,因此它会自行停止,但事实并非如此,而是一切都卡住了。
这可能是什么原因以及如何解决?谢谢。
如果我需要提供更多信息,请告诉我。
解决方案
我必须在读取之前关闭我的输出编写器,否则它会阻塞。
if (!socket.isOutputShutdown()) {
socket.shutdownOutput();
}
答案来自后来删除自己答案的人:-/
推荐阅读
- python - Python:按值范围拆分熊猫数据框
- reactjs - 从 React 组件加载 Django 静态文件
- generics - Apache Nifi - 使用通用流程处理 100 种不同 Jolt 转换的策略
- pandas - 如何用条件将两列替换为一列?[熊猫]
- sql-server - 表值函数查询是否缓存?
- postgresql - 如何列出 Postgres 中的所有会话变量?
- graph - GNUPlot 中具有不同行为的错误栏
- javascript - 使用分页时如何使用 querySelectorAll?
- css - 我的样式表没有加载到我的 jsp 文件中。如何解决这个问题?
- python-3.x - 练习 Python + 请求 + API AOUTH2Error 403