处理连接问题HttpsURLConnection

时间:2013-03-24 14:32:02

标签: java android http rest https

我有一个简单的客户端 - 服务器应用程序,它通过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并告诉我的通信服务使用那个。

这是一个非常难看的解决方案,因为线程最终可能会成为孤儿。

如果有可用的数据,我尝试使用av​​ailable()来查看,但由于这是SSL,它总是返回0.

1 个答案:

答案 0 :(得分:1)

原来我一直在调用conn.setReadTimeout(5000);在错误的地方

conn = getConnection(address);
    conn.setReadTimeout(5000);
    conn.setRequestMethod("GET");

这将导致read()无法正确失败。