aabbwoshishei
小书房
采纳率61.5%
2013-11-04 12:50

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);
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • aabbwoshishei 小书房 8年前

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

    点赞 5 评论 复制链接分享
  • Ryetal Ryetal 4年前

    客户端的readline是阻塞的,只有读到尾部才会返回null,你在服务器端不调用close,socket没有关闭,那么客户端的readline就一直阻塞在那(也没有读到一行),所以没有输出

    点赞 评论 复制链接分享
  • hxh1311 hxh1311 7年前

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

    点赞 评论 复制链接分享
  • dongtianliubuzhu dongtianliubuzhu 8年前

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

    点赞 评论 复制链接分享
  • ygycomon 须等待 8年前

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

    点赞 1 评论 复制链接分享
  • ll_0520 ll_0520 8年前

    while((line=br.readLine())!=null)你这里是读一行数据,你应该在发送数据的适当位置手动加入回车或结束符。
    os.close( )我猜测加入的是结束符

    点赞 1 评论 复制链接分享

为你推荐