套接字:在某些条件下无法从BufferedReader读取和/或写入PrintWriter

时间:2011-10-23 12:18:53

标签: java sockets bufferedreader printwriter

大家下午好!

我正在尝试创建一个simnple messagging应用程序,但我无法找到解决大问题的方法。事实上,有两个大问题。

这里是代码:

@Override
public void run() {
    String incoming;
    try {
        while (true) {
            if (!connected)
                break;
            // READING
            if (reader.ready() && (incoming = reader.readLine()) != null) {
                notifier.putCommand(incoming, this);
                incoming = null;
            }

            // WRITING
            synchronized (messagges) {
                for (String message : messagges) {
                    System.out.println("SENDING MESSAGE TO CLIENT: " + message);
                    writer.println(message);
                }
                messagges.clear();
            }
            writer.println("b");
        }
    } catch (IOException e) {
        MyLogger.log(e);
    }
}

问题:

  1. 如果我不是每次都将垃圾文本写入客户端(writer.println("b")),我就无法读取从它发送的BufferedReader上的任何消息。怎么可能?!

  2. 在客户端,我只看到很多“b”,但在(writer.println(message))的语句中发送了任何内容。这真的很奇怪,因为当我在服务器上打印时向客户端发送消息:[...]我在控制台中看到它,但随后消息未被发送。

  3. 这可能是什么问题?

1 个答案:

答案 0 :(得分:1)

您需要了解缓冲的工作原理,特别是学会使用flush()方法指示缓冲的编写器实际发送数据。