大家下午好!
我正在尝试创建一个简单的消息传递应用程序,但我找不到解决大问题的方法。确实有两个大问题。
代码如下:
@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);
}
}
问题:
如果我不每次都给客户端写垃圾文本
(writer.println("b"))
我无法读取 BufferedReader 上发送的任何消息。这怎么可能?!在客户端,我只看到很多“b”,但在
(writer.println(message))
的语句内发送的任何内容。这真的很奇怪,因为当我在服务器上打印 SENDING MESSAGE TO CLIENT: [...] 我在控制台中看到它,但随后消息没有发送。
这可能是什么问题?
最佳答案
您需要了解缓冲的工作原理,特别是学习使用 flush()
方法来指示缓冲写入器实际发送数据。
关于java - 套接字 : cannot read from BufferedReader and/or write to PrintWriter in certain conditions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7866080/