httpurlconnection超时设立

httpurlconnection超时设置

1)使用TimedUrlConnection设置超时

 URL   url=new   URL(someurlname);   
  URLConnection   urlconn=url.openConnection();   
  TimedUrlConnection   timeoutconn=new   TimedUrlConnection(urlconn,100000);//time   out:   100seconds   
  boolean   bconnectok=timeoutconn.connect();   
  if(bconnectok==false)   
  {   
  //urlconn   fails   to   connect   in   100seconds   
  }   
  else   
  {   
  //connect   ok   
  } 

 

2)设置系统属性设置超时

System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
System.setProperty("sun.net.client.defaultReadTimeout", "30000"); 

 

 HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时:
System.setProperty("sun.net.client.defaultConnectTimeout", 超时毫秒数字符串);
System.setProperty("sun.net.client.defaultReadTimeout", 超时毫秒数字符串);
其中: sun.net.client.defaultConnectTimeout:连接主机的超时时间(单位:毫秒)
sun.net.client.defaultReadTimeout:从主机读取数据的超时时间(单位:毫秒)

例如:
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
System.setProperty("sun.net.client.defaultReadTimeout", "30000");

       JDK 1.5以前的版本,只能通过设置这两个系统属性来控制网络超时。在1.5中,还可以使用HttpURLConnection的父类URLConnection的以下两个方法:
setConnectTimeout:设置连接主机超时(单位:毫秒)
setReadTimeout:设置从主机读取数据超时(单位:毫秒)

例如:
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
urlCon.setConnectTimeout(30000);
urlCon.setReadTimeout(30000);

        需要注意的是,笔者在JDK1.4.2环境下,发现在设置了defaultReadTimeout的情况下,如果发生网络超时,HttpURLConnection会自动重新提交一次请求,出现一次请求调用,请求服务器两次的问题(Trouble)。


文章出处:DIY部落(http://www.diybl.com/course/3_program/java/javajs/2007128/91119_2.html)