免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3606 | 回复: 1
打印 上一主题 下一主题

in.read()最后in.read(buf)都阻塞 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-07 11:57 |只看该作者 |倒序浏览
服务器端应该是用.net写的

我客户端去读取数据

代码段1:
  1. BufferedReader in = new BufferedReader(new InputStreamReader(
  2.                                 socket.getInputStream()));
  3.                 int n = 0;
  4.                 while ((n = in.read()) > 0) {
  5.                         char c = (char)n;
  6.                         System.out.print((char) n);
  7.                 }
  8.                 System.out.println("end");
复制代码
代码段2:
  1. DataInputStream in = new DataInputStream(socket.getInputStream());
  2.                 byte[] buf = new byte[1024];
  3.                 int len = 0;
  4.                 while ((len = in.read(buf)) != -1) {
  5.                         String text = new String(buf, 0, len);
  6.                         System.out.print(text);
  7.                 }
复制代码
这两段代码  都能读取到服务端发来的数据
但是最后都会阻塞,程序不能结束!!
应该怎么处理呢?让程序读完数据后 退出程序??

论坛徽章:
23
双鱼座
日期:2013-08-30 09:25:19辰龙
日期:2014-07-28 11:22:24白羊座
日期:2014-08-26 10:34:1815-16赛季CBA联赛之浙江
日期:2016-03-15 10:51:5415-16赛季CBA联赛之八一
日期:2016-05-31 09:38:3615-16赛季CBA联赛之辽宁
日期:2017-08-31 14:59:2115-16赛季CBA联赛之辽宁
日期:2017-12-06 14:12:3615-16赛季CBA联赛之天津
日期:2019-01-02 15:25:4915-16赛季CBA联赛之深圳
日期:2020-12-06 11:26:21狮子座
日期:2014-05-19 09:16:35技术图书徽章
日期:2014-03-27 13:37:39技术图书徽章
日期:2013-08-30 09:28:52
2 [报告]
发表于 2012-09-07 13:23 |只看该作者
若是服务器端的socket流没有关闭动作,那么客户端采用这种读取方式当然会阻塞啊,
因为它并不知道应该什么时候读取结束。

可以考虑两边的传输建立于协议之上,服务器告诉客户端可以读多少内容,客户端读够
了就可以自行break了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP