Socket OutputStream(BufferedWriter)不刷新消息
Socket OutputStream(BufferedWriter) not flushing msg
使用一个简单的客户端,我试图通过 Socket
的 OutputStream
:
发送控制台输入
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) 之前数据不会进入低谷?
你是在读台词,但不是在写台词。在您编写消息时为消息添加行终止符。
使用一个简单的客户端,我试图通过 Socket
的 OutputStream
:
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) 之前数据不会进入低谷?
你是在读台词,但不是在写台词。在您编写消息时为消息添加行终止符。