0

我嘗試從移動設備下載文件。移動通過wifi連接,有時,移動位置改變,並且連接到另一個wifi。對於下載,我用:無任何例外的被禁止下載

final URLConnection ucon = url.openConnection(); 
    ucon.setReadTimeout(10000); 
    ucon.setConnectTimeout(10000); 
    final InputStream inputStream = ucon.getInputStream(); 
    final BufferedInputStream bis = new BufferedInputStream(inputStream); 

而且bis.available()和bis.read()後能得到直至字節計數> ucon.getContentLength數據()。

當wifi連接發生變化時,我預期有一個(IO)異常(或至少TimeoutException),但沒有任何結果。

在另一個類中,我檢查網絡連接(使用BroadcastReceiver),並且我發現事件斷開/正常連接。因此,我可以使用廣播接收器來停止並重新啓動下載,但我認爲它不是這是最好的方式。

你有任何想法在這種情況下得到一個例外?

謝謝。

回答

1

我相信在這種情況下可能無法獲得異常/錯誤,至少不可靠。

對等體基本上不可用,所以您不會再收到任何數據。如果您不會發送數據(如果您使用HTTP下載,則不會發生這種情況),只要您沒有實現自己的超時,就不會發生任何事情。

所以,我會去聽你的網絡變化事件的方式。

此外應注意:

是,對於一個TCP連接,您(或OS)只能檢測錯誤的問題:

  • 如果你發送的數據並沒有ACK從回來對方
  • 如果對方發送RST或類似的東西。

如果對方消失(或無法訪問,你的情況),你不(僅通過自己的超時)發送數據,因此無法檢測到錯誤。

+0

謝謝你的迴應,即使我仍然希望另一種解決方案。關鍵是如果我使用3G網絡,我認爲在連接另一個3G天線之前可能會有很大的延遲,因此請繼續下載而不要重新啓動它。同樣,當我嘗試減少帶寬時,以相同的方式管理3G網絡更改也變得更加困難。 :/ 最後的解決方案,創建一個流媒體服務器? – Kikiwa 2013-02-14 10:27:32