2011-07-26 53 views
3

我試圖用這種方法從Web服務器下載XML文本文件:java.net.SocketException異常:網絡是無法訪問:連接

static void download (String url , String fileName) throws IOException{ 

      FileWriter xmlWriter; 
      xmlWriter = new FileWriter(fileName); 
      System.out.println("URL to download is : " + url); 

      // here Exception is thrown///////////////////////////////// 
      BufferedReader inputTxtReader = new BufferedReader 
         (new BufferedReader(new InputStreamReader(addURL.openStream()))); 
      //////////////////////////////////////////////////////// 

      String str ; 
      String fileInStr = ""; 

      str = inputTxtReader.readLine(); 

      while (!(str == null) ){///&& !(str.equals("</tv>")) 
       fileInStr += (str + "\r\n"); 
       str = inputTxtReader.readLine(); 
      } 

      xmlWriter.write(fileInStr); 
      xmlWriter.flush(); 
      xmlWriter.close(); 
      System.out.println("File Downloaded"); 
} 

有時,這種異常被拋出(我指定的地方是代碼) :

java.net.SocketException: Network is unreachable: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 
    at java.net.Socket.connect(Socket.java:518) 
    at java.net.Socket.connect(Socket.java:468) 
    at sun.net.NetworkClient.doConnect(NetworkClient.java:157) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:389) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:516) 
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:233) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:306) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:318) 
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:788) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:729) 
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:654) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:977) 
    at java.net.URL.openStream(URL.java:1009) 
    at MessagePanel.download(MessagePanel.java:640) 
    at WelcomThread.run(MainBody2.java:891) 

請指引我

謝謝大家。

+1

'!(str == null)'看起來很混亂,你應該寫'str!= null'。 – TC1

+1

你在哪裏以及如何初始化addURL變量? – pap

回答

7

您所面臨的連接中斷。這是否發生在3G,WiFi或計算機上的「普通」連接?

無論如何,你必須假定連接可以寫你的應用程序時,會丟失不時。例如,對於手機,這種情況經常發生在管子,地下室等地方。對於PC應用程序,這種情況不太常見,但有時會發生。

重試可以是一個很好的解決方案。此時,解釋網絡的乾淨的錯誤消息也不可用。

+1

我添加了一個線程,當請求超時它再次嘗試。這是有效的。因爲在我的網絡中我們播放了幾個媒體內容;出現這個問題。謝謝你的幫助 – sajad

1

「網絡無法訪問」就是這個意思。你沒有連接到網絡。這是你的程序之外的東西。可能是一個壞的操作系統設置,網卡,路由器等

+1

這也是,但是我還是沒有定義'addURL'在那裏的任何地方? – TC1

+0

@ TC1:哈,好趕! –

1

我面臨着越來越java.net.SocketException不是有時但每次的情況。我已將-Djava.net.preferIPv4Stack=true添加到java命令行,並且我的程序開始正常工作。

0

我沒有你的代碼測試,因此它雖然是完全不同的情況下,我仍想與大家分享我的經驗。 (這也必須來不及回答,雖然,我希望這個答案依然將有助於在未來的某個人)

我像最近遇到了類似的經驗,你比如有些時候無法訪問網絡,但有時不是。換句話說,原因是太短暫。看起來Java會在拋出IOException異常時指出「Network is unreachable」,當連接失敗時會因此而失敗。這很容易讓人誤解(我會期待像「超時」這樣的說法),我花了將近一個月的時間來檢測它。

在這裏,我找到了另一篇關於如何設置超時。 Alternative to java.net.URL for custom timeout setting

再次,這可能不是你經歷過的情況,而是未來的某個人。

相關問題