我有一个简单的客户端-服务器应用程序,它通过 REST API 下载文件。当我使用基本的 http auth 时,文件是通过 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。