我做了一个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)
文件不是问题所在。有时它会停在第五张图片上,有时会停在第70张图片上。这似乎是相当随机的。
我怀疑我尝试访问的url连接不均匀。但是我怎么才能修复它呢?我尝试将连接和读取超时设置为一个滑稽的值
huc.setConnectTimeout(3600000);
huc.setReadTimeout(3600000);
但它并没有解决这个问题。
有什么想法吗?还是我的问题有另一个根源?
发布于 2014-03-06 02:19:56
我现在为我的问题找到了另一个解决方案。
SocketException被抛出
ReadableByteChannel rbc = Channels.newChannel(websiteUrl.openStream());
因此,我构建了一个try‘n’clause子句,并围绕它构建了一个while循环:
ReadableByteChannel rbc = null;
while (true) {
try {
rbc = Channels.newChannel(website.openStream());
break;
} catch (SocketException e) {
System.out.println("connection failed");
}
}
当然,它不能解决糟糕的连接问题,但至少我现在可以在我的程序的一次运行中下载所有东西。
https://stackoverflow.com/questions/22190446
复制相似问题