网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.J2EE中使用Display标记库来展示表.
.用Applet写的菜单程序 machine.
.Eclipse快速上手指南 (1).
.int和byte数组的转换.
.安装SJD节省软件开支.
.调整JavaTMI/O性能.
.企业级应用中开发 J2EE 应用的黄.
.在Spring中配置Hibernate的事务.
.用FactoryMethod模式扩展MyMSDNT.
.Java 理论和实践:那是您的最终答.
.Sun年底推Solaris 10第一个升级包.
.Servlet处理POST请求.
.用line_as_stream 简化流的读取.
.WebLogic的研究之开发、部署EJB(.
.错误的堆大小产生的 “堆问题”.
.Weblogic Server ant开发Web Ser.
.重新温习数组.
.推荐两本iava书.
.一个相当经典的RMI实例源代码及详.
.Java 12大特色介绍.

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

发表日期:2008-1-5


 


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中读取数据时,你的程序不得不阻塞起来,但并不意味着你的程序这时什么也不能做。



上一篇:用Socket类实现HTTP协议客户端应用 人气:982
下一篇:java开发的邮件发送程序 人气:557
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐