HttpURLConnection設(shè)置網(wǎng)絡(luò)超時
Posted on 2010-04-13 19:00 leekiang 閱讀(1738) 評論(0) 編輯 收藏 所屬分類: java 、io,tcpHttpURLConnection對象不能直接構(gòu)造,需要通過 URL.openConnection()來獲得HttpURLConnection對象,示例代碼如下:
String urlStr= www.ttt.org;
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
?
HttpURLConnection是基于HTTP協(xié)議的,其底層通過socket通信實(shí)
現(xiàn)。如果不設(shè)置超時(timeout),在網(wǎng)絡(luò)異常的情況下,可能會導(dǎo)致程序僵死而不繼續(xù)往下執(zhí)行??梢酝ㄟ^以下兩個語句來設(shè)置相應(yīng)的超時:
System.setProperty("sun.net.client.defaultConnectTimeout",
超時毫秒數(shù)字符串);
System.setProperty("sun.net.client.defaultReadTimeout",
超時毫秒數(shù)字符串);
其中:
sun.net.client.defaultConnectTimeout:連接主機(jī)的超時時間(單位:毫秒)
sun.net.client.defaultReadTimeout:
從主機(jī)讀取數(shù)據(jù)的超時時間(單位:毫秒)
例如:
System.setProperty("sun.net.client.defaultConnectTimeout",
"30000");
System.setProperty("sun.net.client.defaultReadTimeout",
"30000");
JDK
1.5以前的版本,只能通過設(shè)置這兩個系統(tǒng)屬性來控制網(wǎng)絡(luò)超時。在1.5中,還可以使用HttpURLConnection的父類
URLConnection的以下兩個方法:
setConnectTimeout:設(shè)置連接主機(jī)超時(單位:毫秒)
setReadTimeout:
設(shè)置從主機(jī)讀取數(shù)據(jù)超時(單位:毫秒)
例如:
HttpURLConnection urlCon =
(HttpURLConnection)url.openConnection();
urlCon.setConnectTimeout(30000);
urlCon.setReadTimeout(30000);
來源:http://www.xd-tech.com.cn/blog/article.asp?id=37
另外可參考java中處理http連接超時的方法
Linux,可以修改/proc/sys/net/ipv4/tcp_syn_retries的值,缺省是72,大約5分鐘左右,改小點(diǎn)時間就短些