【问题标题】:HttpURLConnection irregular SocketExceptionHttpURLConnection不规则SocketException
【发布时间】:2014-03-05 06:40:02
【问题描述】:

我制作了一个 java 程序,用于从任何网站的可选目录中下载一些图像。 一切正常,但有时它不会继续下载,但会在一段时间后抛出 SocketException。这里是错误日志:

...
62.png downloaded
63.png downloaded
64.png downloaded
65.png downloaded
66.png downloaded
Exception in thread "main" java.net.SocketException: Unexpected end of file from server
    at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.URL.openStream(Unknown Source)
    at DownloadImage.main(DownloadImage.java:35)

文件不是问题。有时它停在第 5 张图像,有时停在第 70 张图像。这似乎很随机。

我怀疑与我尝试访问的网址的连接不均匀。但是我该如何解决呢?我试图将连接和读取超时设置为一个有趣的值

huc.setConnectTimeout(3600000);
huc.setReadTimeout(3600000);

但它没有解决它。

有什么想法吗?还是我的问题有其他根源?

【问题讨论】:

  • 您无法从您的端解决服务器端的问题。设置读取超时总是一个好主意,但是这个值很傻,不会影响这个问题。将连接超时设置为一个巨大的值是没有意义的,因为 (a) 你不能将它增加到超过大约一分钟的平台默认值,并且 (b) 它与这个问题无关。
  • 好的,我认为超时会使我的客户端等待服务器响应的时间更长。那么我必须想另一个解决方案。谢谢!
  • 你能告诉我们你的源代码吗?也许您没有以正确的方式检查错误。 (发生错误...)

标签: java timeout httpurlconnection socketexception


【解决方案1】:

我现在为我的问题找到了另一种解决方案。

SocketException 被抛出

ReadableByteChannel rbc = Channels.newChannel(websiteUrl.openStream());

所以我构建了一个 try'n'catch 子句和一个围绕它的 while 循环:

ReadableByteChannel rbc = null;
while (true) {
    try {
        rbc = Channels.newChannel(website.openStream());
        break;
    } catch (SocketException e) {
        System.out.println("connection failed");
    }
}

当然,它并不能解决糟糕的连接问题,但至少我现在可以在一次运行程序中下载所有内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多