java.net.SocketException:网络无法访问:连接

我试图使用此方法从Web服务器下载xml文本文件:

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("")) fileInStr += (str + "\r\n"); str = inputTxtReader.readLine(); } xmlWriter.write(fileInStr); xmlWriter.flush(); xmlWriter.close(); System.out.println("File Downloaded"); } 

有时抛出此exception(我指定的是代码):

 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.(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) 

请指导我

谢谢你们。

您正面临连接故障。 这是否发生在3G,WiFi或计算机上的“普通”连接?

无论如何,您必须假设在编写应用程序时,连接可能会不时丢失。 例如,对于移动设备,这种情况经常发生在管道,地下室等中。对于PC应用程序,这种情况不太常见,但有时会发生。

重试可能是一个很好的解决方案。 此时也无法提供解释网络的干净错误消息。

“网络无法访问”意味着就是这样。 您没有连接到网络。 这是你的计划之外的东西。 可能是糟糕的操作系统设置,NIC,路由器等。

我有时遇到java.net.SocketException而不是每次都有这种情况。 我已经将-Djava.net.preferIPv4Stack=true添加到java命令行,我的程序开始正常工作。

我没有测试你的代码,所以这将是完全不同的情况,但我还是想分享我的经验。 (虽然这个问题一定是太迟了,但我希望这个答案在将来能帮到某个人)

我最近遇到过像你这样的类似经历,有时网络无法访问,但有时却无法访问。 简而言之,原因是时间太短。 当连接失败时,似乎Java抛出IOException并声明“网络无法访问”。 这是如此误导(我希望说“超时”之类的东西)我花了将近一个月的时间来检测它。

在这里,我发现了另一篇关于如何设置时间的post。 java.net.URL替代自定义超时设置

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