Socket OutputStream(BufferedWriter)不刷新消息

Socket OutputStream(BufferedWriter) not flushing msg

使用一个简单的客户端,我试图通过 SocketOutputStream:

发送控制台输入
try (Socket socket = new Socket(host, port);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) {

    Thread input = new Thread(() -> {
        String msg;
        try {
            while ((msg = in.readLine()) != null) {
                System.out.println(msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    });
    input.start();

    String msg;
    try {
        while ((msg = stdIn.readLine()) != null) {
            out.write(msg);
            out.flush(); // not flushing?
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

} catch (IOException e) {
    e.printStackTrace();
}

在我发送一个 END OF INPUT 之前,我似乎没有刷新流,之后我在服务器端收到所有以前的尝试作为一个长 String,但也终止了客户端。

使用 PrintWriter 而不是 BufferedWriter 会产生相同的结果。

为什么在从 std in 读取 END OF INPUT(^Z) 之前数据不会进入低谷?

你是在读台词,但不是在写台词。在您编写消息时为消息添加行终止符。