【发布时间】:2016-01-22 05:10:50
【问题描述】:
使用一个简单的客户端,我尝试通过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) 之前数据不会进入低谷?
【问题讨论】:
-
为什么
stdIn声明的末尾有一个左括号? -
@3kings 因为它应该在那里,因为它打开了
try块。
标签: java sockets outputstream flush