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

c90pui9n  于 2023-08-02  发布在  Java
关注(0)|答案(6)|浏览(265)

我正在尝试使用以下方法从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)


请你指引我
谢谢大家

fd3cxomn

fd3cxomn1#

你正面临着一个连接故障。这会发生在3G、WiFi或计算机上的“普通”连接中吗?
无论如何,在编写应用程序时,您必须假设连接可能会不时丢失。例如,对于移动设备,这经常发生在管道中、地下室中等。对于PC应用程序,这种情况不太常见,但有时会发生。
重试可能是一个很好的解决方案。一个干净的错误消息,解释了网络在这个时刻也不可用。

6ie5vjzr

6ie5vjzr2#

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

c8ib6hqw

c8ib6hqw3#

“网络无法访问”就是这个意思。您未连接到网络。这是你的程序之外的东西。可能是操作系统设置、网卡、路由器等错误。

0g0grzrc

0g0grzrc4#

我还没有测试过你的代码,所以这将是完全不同的情况下,虽然,我仍然想分享我的经验。(虽然这个答案已经太晚了,但我希望这个答案在将来能帮助到一些人)
我最近遇到了类似的经验,如你有时网络是不可达的,但有时不是。简而言之,原因是时间太少了。当连接失败时,Java似乎会抛出IOException并声明“Network is unreachable”。这是如此的误导(我会期望像说“暂停”之类的话),我花了将近一个月的时间来检测它。
在这里,我发现了另一个关于如何设置时间的帖子。Alternative to java.net.URL for custom timeout setting
同样,这可能不是你经历过的同一个案例,而是未来的某个人。

7vux5j2d

7vux5j2d5#

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

2admgd59

2admgd596#

在我的情况下,我的互联网连接本身有DNS,显然无法解析主机名。

相关问题