2011-07-26 70 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

再次,这可能不是你经历过的情况,而是未来的某个人。

相关问题