私は単純なクライアントを持っています-RESTAPIを介してファイルをダウンロードするサーバーアプリ。基本http認証を使用しているため、ファイルはssl経由で送信されます。
//my download loop
HttpsURLConnection conn;
//some handling of response codes and content-length
InputStream s = conn.getInputStream();
while (true) {
i = br.read(buffer); //if server shuts down, I stall here
if (i == -1)
break;
downloadedSize += i;
fis.write(buffer, 0, i);
}
これはすべて正常に機能し、サーバーがファイル転送をシャットダウンする状況がコードで発生するまで問題はありません。その時、コードは単にストールし、私には役に立たないスレッドがあります。
私の質問は、サーバーがシャットダウンされたことをどのように検出するかです。WiresharkでRST信号が送信されているのがわかりますが、例外は発生しません。これは私にはかなり一般的な作業のように思えますが、それでも私はそれに対する簡単な答えを見つけていません。
現在、スケジュールされたタスクを使用しています。これは、時々ダウンロードに進捗があったかどうかをチェックします。問題が検出されると、新しいworkerThreadが作成され、通信サービスにその問題を使用するように指示されます。
スレッドが孤立してしまう可能性があるため、これは非常に醜い解決策です。
available()を使用して、使用可能なデータがあるかどうかを確認しようとしましたが、これはSSLであるため、常に0を返します。