2014-03-05 55 views
0

我做了一個java程序,從任何網站的可選目錄下載一些圖像。 一切工作正常,但有時它不會繼續下載,但會在一段時間後拋出一個SocketException。這裏的錯誤日誌:HttpURLConnection不規則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

您無法從服務器端解決問題。設置讀取超時總是一個好主意,但是這個值是愚蠢的,不會影響這個問題。將連接超時設置爲一個巨大的值是沒有意義的,因爲(a)你無法將其增加到大約一分鐘的平臺默認值以外,並且(b)它與此問題無關。 – EJP

+0

好吧,我認爲超時會讓我的客戶端等待更長的服務器回答。那麼我必須考慮另一種解決方案。謝謝! – Froxx

+0

你能告訴我們你的源代碼嗎?也許你不會以正確的方式檢查錯誤。 (錯誤發生...) – hgoebl

回答

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

它沒有解決的接觸不良問題當然,但至少我現在可以在我的程序的單個運行中下載所有內容。