java - 套接字 : cannot read from BufferedReader and/or write to PrintWriter in certain conditions

标签 java sockets bufferedreader printwriter

大家下午好!

我正在尝试创建一个简单的消息传递应用程序,但我找不到解决大问题的方法。确实有两个大问题。

代码如下:

@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)) 的语句内发送的任何内容。这真的很奇怪,因为当我在服务器上打印 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/

相关文章:

java - 使用 Java 解析文件并替换双引号内的空格

java - 在tomcat上部署项目后,日志中出现Scala错误

java - Spring Boot 应用程序无法实例化类,除非使用 Autowired 注解

java - 使用 GSON 反序列化两种不同的日期格式

java - com.ximpleware 解析 XML - XPath - ==> 末尾或附近的语法错误

c++ - 套接字动态绑定(bind)到缩小范围

java - 按行合并两个文档

c# - 使用套接字将数据从C#应用程序发送到Lua应用程序

java - 如果我尝试通过 DatagramChannel 发送空 UDP 数据包但底层套接字缓冲区已满,会发生什么情况?

java - 读取任何具有奇怪编码的文本文件?