java - 处理连接问题 HttpsURLConnection

标签 java android http rest https

我有一个简单的客户端-服务器应用程序,它通过 REST API 下载文件。当我使用基本的 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 信号,但没有引发异常。在我看来,这是一项相当常见的任务 但我还没有找到一个简单的答案。

目前我正在使用计划任务,该任务检查下载每个任务是否有任何进展 不时地。如果它检测到问题,那么它会创建一个新的工作线程并告诉我的通信服务使用该线程。

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

我尝试使用 available() 来查看是否有任何可用数据,但由于这是 SSL,它总是返回 0。

最佳答案

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

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

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

关于java - 处理连接问题 HttpsURLConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15599713/

相关文章:

android - 形状矩形角(android)

java - StreamCorruptedException,当使用 ObjectInputStream 时

python - 如何在没有 discord.py 的情况下获取用户在 discord 服务器中发送的消息数?

html - HTTPS 作为表单的 Action 是否足够?

java - Ant 脚本、调试 JAR 和 Eclipse

java - 同步方法和静态变量访问 JAVA/ANDROID

android - 如何使用单独的应用程序清除所有通知?

android - 如何在 Android 的 Spinner View 中添加左侧可绘制对象

java - 我在发送短信时遇到异常

java - 通用 Spring Data JPA 存储库 findAll