首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >HttpURLConnection不规则SocketException

HttpURLConnection不规则SocketException
EN

Stack Overflow用户
提问于 2014-03-05 14:40:02
回答 1查看 754关注 0票数 0

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

代码语言:javascript
代码运行次数:0
运行
复制
...
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)

文件不是问题所在。有时它会停在第五张图片上,有时会停在第70张图片上。这似乎是相当随机的。

我怀疑我尝试访问的url连接不均匀。但是我怎么才能修复它呢?我尝试将连接和读取超时设置为一个滑稽的值

代码语言:javascript
代码运行次数:0
运行
复制
huc.setConnectTimeout(3600000);
huc.setReadTimeout(3600000);

但它并没有解决这个问题。

有什么想法吗?还是我的问题有另一个根源?

EN

回答 1

Stack Overflow用户

发布于 2014-03-06 10:19:56

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

SocketException被抛出

代码语言:javascript
代码运行次数:0
运行
复制
ReadableByteChannel rbc = Channels.newChannel(websiteUrl.openStream());

因此,我构建了一个try‘n’clause子句,并围绕它构建了一个while循环:

代码语言:javascript
代码运行次数:0
运行
复制
ReadableByteChannel rbc = null;
while (true) {
    try {
        rbc = Channels.newChannel(website.openStream());
        break;
    } catch (SocketException e) {
        System.out.println("connection failed");
    }
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22190446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档