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

时间:2011-07-26 06:51:18

标签: java sockets exception network-programming

我正在尝试使用此方法从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("</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)

请指导我

谢谢大家。

6 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我遇到的情况是有时候java.net.SocketException而不是每次都有-Djava.net.preferIPv4Stack=true。我已将 <Element Attribute="{Binding Value, Converter={StaticResource EqualityConverter}, ConverterParameter={x:reference CompareTo}}" /> 添加到java命令行,我的程序开始正常运行。

答案 3 :(得分:1)

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

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

在这里,我发现了另一篇关于如何设置超时的帖子。 Alternative to java.net.URL for custom timeout setting

同样,这可能与您经历的情况不同,但可能与未来有关。

答案 4 :(得分:0)

这只是发生在我身上。所有答案都没有帮助,因为问题是我最近更改了目标主机配置并在那里放置了不正确的主机值。所以它也可能只是错误的连接细节。

答案 5 :(得分:0)

在更新我的网络适配器配置(通过 PowerShell commandlet New-NetSwitchTeam 迁移到 NIC 耦合网络)后,我遇到了这个错误。我的猜测是,必须调整 java 配置中的某些内容以将这种更改反映到 java 系统。但目前尚不清楚应该在哪里进行更改。我正在进一步调查。