HttpURLConnection不规则的SocketException

时间:2014-03-05 06:40:02

标签: java timeout httpurlconnection socketexception

我制作了一个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);

但它没有解决它。

有什么想法吗?或者我的问题是否有另一个根?

1 个答案:

答案 0 :(得分:0)

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

抛出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");
    }
}

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