奇葩6:下载文件,没有设置超时时间,但是还是报错Connection timed out

现象:

下载文件

FileUtil fileUtils = new FileUtil();
URL url = new URL(urlStr);
urlConn = (HttpURLConnection) url.openConnection();
urlConn.setRequestProperty("Accept-Encoding", "identity"); 
urlConn.connect();
			
long fileSize = urlConn.getContentLength();
inputStream  = new BufferedInputStream(urlConn.getInputStream());
			
Log.e(urlStr, "filesize = " + fileSize);
MyLog.getInstance().writeMessage(TAG, "下载的zip包大小为 = " + fileSize + "字节");

没有特意设置超时时间。

根据API中setConnectTimeout的描述,不设置就是0,也就是infinite timeout,我的理解是永远不会超时。

但是实际情况是:

第一次15:48:23开始下载,15:53:32超时,5分9秒
第二次15:57:13开始下载,16:03:32超时,6分9秒
第三次16:27:04开始下载,16:37:14超时,10分10秒

原因:

参考文章:http://stackoverflow.com/questions/9986712/receiving-request-timeout-even-though-connect-timeout-and-read-timeout-is-set-to

引用答案中的一句话:

It might be possible that the server you are connecting to is timing out your client.

于是,问了服务器的同事,ngix配置中果然设置了超时。但是服务器超时时间设置的是60s,为什么我超时的时间却是5分钟,甚至10分钟呢?

不清楚,不明白。


PS: 超时分两种,connect timeout 和 read timeout,一个是建立连接的超时时间,一个是传递数据的超时时间。

http://stackoverflow.com/questions/3069382/what-is-the-difference-between-connection-and-read-timeout-for-sockets


你可能感兴趣的:(android)