动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   程序开发 → 阅读文章

 从socket中读取数据时使用超时

作者来源: 
阅读 数 332 人次 , 2006-4-28 9:56:00 

 


Java 1.4在Java API加入了非阻塞I/O(non-blocking I/O),不过Java 1.3和更早的版本都不支持这样的特性。然而,你可以用java.net.Socket类的超时属性来获得一些类似于非阻塞I/O的功能。

要使用超时属性,首先你要创建一个socket,然后设置你期望的超时时间。setSoTimeout方法有一个参数,这个int型参数指定了socket在抛出一个违例前要等待的超时时间,单位是毫秒,像下面的例子:

Socket s = new Socket(server, port);
System.out.println(s.getSoTimeout());
s.setSoTimeout(5000);
InputStream in = s.getInputStream();
现在我们尝试从这个socket中读数据。如果超过了指定的时间还读不到任何数据,程序将抛出一个java.io.InterruptedIOException。你可以捕获这一违例并决定是否尝试进行另一次读取操作:

try {
while ( (bytesRead = in.read(buffer)) != -1 ) {
// do something with the data
System.out.println
(new String(buffer, 0, bytesRead));
}
}
catch (InterruptedIOException e) {
System.err.print("timeout on read");
// 决定是否继续读取
}
在早于1.4的Java版本中,当从socket中读取数据时,你的程序不得不阻塞起来,但并不意味着你的程序这时什么也不能做。


  
 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:利用UDP Sockets技术实现IP多点传送
· 下一篇:一个Scocket实例程序
· 软件开发项目需求管理简述
· J2ME编程中时间处理全攻略
· 使用ejbframe轻松编写EJB组件
· 用J2ME编写手机短消息发送程序
· 揭开病毒的奥秘 DLL的远程注入技术详解


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077