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)Exception(または少なくともTimeoutException)が発生することを期待していましたが、何もありませんでした。

他のクラスでは、(BroadcastReceiver を使用して) ネットワーク接続を確認し、イベントが正常に切断/接続されていることを確認しました。そのため、ブロードキャスト レシーバーを使用してダウンロードを停止および再開できますが、それは最善の方法ではないと思います。それを行う。

この場合、例外を取得する考えはありますか?

ありがとうございました。

4

1 に答える 1

1

この場合、少なくとも確実ではなく、例外/エラーを取得できない可能性があると思います。

ピアは基本的に使用できないため、データを受信しなくなります。データを送信しない場合 (HTTP ダウンロードを使用する場合は送信されません)、独自のタイムアウトを実装しない限り、何も起こりません。

したがって、ネットワーク変更イベントをリッスンする方法に行きます。

さらに注意:

問題は、TCP 接続の場合、ユーザー (または OS) がエラーしか検出できないことです。

  • データを送信し、相手から ACK が返ってこない場合
  • 反対側がRSTまたは同様のものを送信した場合。

反対側がなくなった(またはあなたの場合は到達不能)場合、データを送信しないと、エラーを検出できません(独自のタイムアウトのみを介して)。

于 2013-02-14T10:12:02.513 に答える