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),但什么也没有。

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

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

谢谢你。

4

1 回答 1

1

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

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

因此,我会采用您的方式来监听网络更改事件。

进一步说明:

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

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

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

于 2013-02-14T10:12:02.513 回答