2013-02-01 34 views
0

我正在我的應用程序中下載文件,並使用以下超時。可以setConnectionTimeout停止完成下載

HttpParams httpParameters = new BasicHttpParams(); 
HttpConnectionParams.setConnectionTimeout(httpParameters, 5000); 
HttpConnectionParams.setSoTimeout(httpParameters, 5000); 

現在,然後文件只是部分下載。如果在慢速移動網絡上5秒鐘內沒有完成,可以設置5秒的StopTimeout停止下載嗎?

從谷歌開發文檔,它說:

以毫秒爲單位的缺省套接字超時(SO_TIMEOUT),這是 等待數據的超時。

這是指等待第一個數據的時間,還是等待其他數據的時間? IE下載開始,但沒有進一步的數據到達5秒鐘。

編輯 我做了一個測試,我的SO_TIMEOUT減少到100毫秒NAD它在從僅完成一秒鐘後停止donwload沒有影響。

回答

1

5秒setSoTimeout可以停止下載,如果它未在5秒內緩慢移動網絡上完成?

不,但如果任何特定的read()調用需要超過5秒的時間來接收任何數據,它可以拋出SocketTimeoutException。當你得到這個例外時你做什麼取決於你。你可以重試。

如果讀取超時,發送者停滯,網絡故障或讀取超時時間太短。 5000ms是一個非常短的超時。提高它,看看會發生什麼。

-1

以及每個文檔設置SO_TIMEOUT將提高java.net.SocketTimeoutException異常,如果讀取調用花費更多的時間,然後指定的(在你的情況是5000毫秒,這個等待時間是指時間從開始下載),這意味着異常會打斷你下載過程。

使用指定的超時(以毫秒爲單位)啓用/禁用SO_TIMEOUT。 如果將此選項設置爲非零超時,則與此套接字關聯的 InputStream上的read()調用將僅阻塞此 時間量。如果超時到期,將引發一個 java.net.SocketTimeoutException異常,但Socket仍然是 有效。該選項必須在進入阻止 操作之前啓用才能生效。超時時間必須> 0。零時間 被解釋爲無限超時。

+0

所以你說的是,如果文件下載沒有在5秒內完成,文件下載過程將被暫停?所以我將不得不將這個超時時間增加到10-20秒?或者有更好的方法來處理下載? – Rynardt

+0

把SO_TIMEOUT設置爲0意味着無限等待,這對我來說應該是這種情況,因爲setConnectionTimeout負責建立連接或在適當的時候對其進行計時。 – Waqas

+0

我從這裏得到了這個代碼在stackoverflow。當然,必須有一個理由來使用SO_TIMEOUT?編輯:我做了一些測試,並將SO_TIMEOUT更改爲100毫秒,完全沒有阻止完整下載後的下載。 – Rynardt