Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.net.SocketException:无法访问网络:连接_Java_Sockets_Exception_Network Programming - Fatal编程技术网

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

java.net.SocketException:无法访问网络:连接,java,sockets,exception,network-programming,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);

我正在尝试使用以下方法从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");
}
静态无效下载(字符串url、字符串文件名)引发IOException{
文件编写器xmlWriter;
xmlWriter=新文件编写器(文件名);
System.out.println(“要下载的URL为:“+URL”);
//这里抛出异常/////////////////////////////////
BufferedReader InputXTReader=新BufferedReader
(新的BufferedReader(新的InputStreamReader(addURL.openStream())));
////////////////////////////////////////////////////////
字符串str;
字符串fileinster=“”;
str=inputxtreader.readLine();
而(!(str==null)){//&&!(str.equals(“”)
fileInStr+=(str+“\r\n”);
str=inputxtreader.readLine();
}
write(fileinster);
xmlWriter.flush();
xmlWriter.close();
System.out.println(“下载的文件”);
}
有时会引发此异常(我指定的是代码):

java.net.SocketException:无法访问网络:连接
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
位于java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
位于java.net.Socket.connect(Socket.java:518)
位于java.net.Socket.connect(Socket.java:468)
位于sun.net.NetworkClient.doConnect(NetworkClient.java:157)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:389)
位于sun.net.www.http.HttpClient.openServer(HttpClient.java:516)
http.HttpClient.(HttpClient.java:233)
http.HttpClient.New(HttpClient.java:306)
http.HttpClient.New(HttpClient.java:318)
位于sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:788)
位于sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:729)
位于sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:654)
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:977)
位于java.net.URL.openStream(URL.java:1009)
下载(MessagePanel.java:640)
运行(MainBody2.java:891)
请引导我


谢谢大家。

“网络无法访问”就是这个意思。您没有连接到网络。这是你计划之外的事情。可能是操作系统设置、NIC、路由器等不正确。

您正面临连接故障。在3G、WiFi或计算机上的“普通”连接中是否会发生这种情况

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


重试可能是一个很好的解决方案。现在还没有一条清晰的错误消息来解释网络的情况。

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

我还没有用你的代码进行测试,所以情况会完全不同,不过我还是想分享一下我的经验。(不过,这肯定是太迟了,我希望这个答案在将来仍能对某些人有所帮助)

我最近也遇到过类似的经历,比如有些时候网络是遥不可及的,但有时不是。简而言之,原因是超时时间太小。当连接因此而失败时,Java似乎抛出IOException并声明“网络不可访问”。它是如此的误导(我希望说“暂停”之类的话),我花了将近一个月的时间来检测它

在这里,我找到了另一篇关于如何设定时间的帖子。


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

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

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

那也是,但是我还是那里的任何地方都没有
addURL
的定义?
!(str==null)
看起来很混乱,您应该编写
str!=null
。您在何处以及如何初始化addURL变量?我添加了一个线程,当请求超时时,它会重试。这是有效的。因为在我的网络中,我们播放了几种媒体内容;这种情况会发生。谢谢你的帮助
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)