我制作了一个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);
但它没有解决它。
有什么想法吗?或者我的问题是否有另一个根?
答案 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");
}
}
当然,这并不能解决连接错误,但至少我现在可以在我的程序的一次运行中下载所有内容。