【问题标题】:Java Client Socket blocking on BufferedReader?BufferedReader 上的 Java 客户端套接字阻塞?
【发布时间】: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();

【问题讨论】:

    标签: java sockets io bufferedreader printwriter


    【解决方案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"),它是自动刷新的。

    【讨论】:

      猜你喜欢
      • 2017-04-18
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 2020-10-30
      • 2013-10-02
      相关资源
      最近更新 更多