java为什么flush( )方法不能输出数据,一定要close( )才行?

服务端:
ServerSocket ss=new ServerSocket(40006);
while(true)
{
Socket s=ss.accept();
OutputStream os=s.getOutputStream();
os.write("北京".getBytes());
os.flush();//这里改成os.close( ),客户端就能读到,这是为什么啊?
}

客户端:
try {
Socket s=new Socket("192.168.0.110",40006);
InputStream ins=s.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(ins));
String line;
while((line=br.readLine())!=null)
{
System.out.println(line);
}


一只斗牛犬
浏览 1427回答 6
6回答

千巷猫影

知道了,BufferedReader是根据“\n”或者“\r”来判断一行的,而这里的服务端根本就没有输入这两个符号,也许close()方法会自动给它加上吧。如果服务端手动给它加上这两个符号中的一个,就可以读出来了。

郎朗坤

flush是输出到缓冲区,缓冲区没满的话不发送,close的动作会强制把缓冲区里没发送的东西发送出去

暮色呼如

close连套接字都关闭了,当然出来了,flush只是清理缓冲区。而且你这个用了缓冲流也没建立缓冲啊

Cats萌萌

OutputStream 这个类的flush()方法不执行任何代码,需要其他的输出流去重写这个方法的

明月笑刀无情

客户端的readline是阻塞的,只有读到尾部才会返回null,你在服务器端不调用close,socket没有关闭,那么客户端的readline就一直阻塞在那(也没有读到一行),所以没有输出
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java