BufferedReader 上的 Java 客户端套接字阻塞?
Posted
技术标签:
【中文标题】BufferedReader 上的 Java 客户端套接字阻塞?【英文标题】:Java Client Socket blocking on BufferedReader? 【发布时间】:2012-10-13 21:48:50 【问题描述】:我用的是老派java.net.Socket
我的客户端连接到服务器并执行以下操作:
BufferedReader in =
new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String fromServer = in.readLine();
它挂在 in.readLine() 处。
我的服务器接受来自客户端的连接并执行以下操作:
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.print("Hello client\n");
我的期望是 out.print("Hello client\n");被调用,客户端应该停止阻塞并继续。
我做错了什么?
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in =
new BufferedReader( new InputStreamReader(clientSocket.getInputStream()));
String fromServer = in.readLine();
【问题讨论】:
【参考方案1】:我猜你没有打电话给out.flush();
见PrintWriter.flush
来自Javadoc
autoFlush - 一个布尔值;如果为 true,println、printf 或 format 方法将刷新输出缓冲区
所以Autoflush
不适用于print
,您需要手动致电flush()
【讨论】:
autoflush 设置为 PrintWriter 构造函数。 具体来说,autoFlush - A boolean; if true, the println, printf, or format methods will flush the output buffer
。这引自 AmitD 在他的帖子中向 PrintWriter 提供的链接。【参考方案2】:
您正在调用out.print("Hello client\n")
,它不是自动刷新的,而您应该调用out.println("Hello client")
,它是自动刷新的。
【讨论】:
以上是关于BufferedReader 上的 Java 客户端套接字阻塞?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java 1.4 中设置 BufferedReader 和 PrintWriter 的超时时间?