【问题标题】:Blocked download without any exceptions无一例外地阻止下载
【发布时间】:2013-02-14 10:07:55
【问题描述】:

我尝试从移动设备下载文件。手机是通过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)Exception(或至少是 TimeoutException),但什么都没有。

在另一个类中,我检查了网络连接(使用广播接收器),我看到事件断开/连接正常。所以,我可以使用广播接收器停止并重新开始下载,但我认为这不是最好的方法。

你有什么想法在这种情况下获得例外吗?

谢谢。

【问题讨论】:

    标签: android download inputstream urlconnection timeoutexception


    【解决方案1】:

    我相信在这种情况下可能不会出现异常/错误,至少不可靠。

    peer基本不可用,所以你不会再收到任何数据了。如果您不发送数据(如果您使用 HTTP 下载,则不会发生这种情况),只要您不实现自己的超时,就不会发生任何事情。

    所以我会采用你的方式来监听网络变化事件。

    补充说明:

    问题是,对于 TCP 连接,您(或操作系统)只能检测错误:

    • 如果您发送数据并且没有从另一端返回 ACK
    • 如果对方发送 RST 或类似的东西。

    如果对方不在(或无法访问,在您的情况下)并且您不发送数据,则您无法检测到错误(仅通过您自己的超时)。

    【讨论】:

    • 感谢您的回复,即使我仍然希望有其他解决方案。关键是如果我使用3G网络,我认为在连接到另一个3G天线之前可能会有很大的延迟,所以继续下载而不重新启动它。同样,当我尝试减少带宽时,管理 wifi3G 网络变化更加困难。 :/ 最后的解决方案,创建一个流媒体服务器?
    猜你喜欢
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多