java.net.SocketException: Network is unreachable: connect

Viewed 75727

I am trying to download a xml text file from a web server using this method:

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");
}

Sometimes this exception is thrown (where I specified is code):

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)

Please guide me

Thank you all.

6 Answers

I haven't tested with your code so it would be totally different case though, still I'd like to share my experience. (Also this must be too late answer though, I hope this answer still would help somebody in the future)

I recently faced similar experience like you such as some times Network is unreachable, but sometimes not. In short words, what was cause is too small time out. It seems Java throws IOException with stating "Network is unreachable" when the connection fails because of it. It was so misleading (I would expect something like saying "time out") and I spent almost a month to detect it.

Here I found another post about how to set time out. Alternative to java.net.URL for custom timeout setting

Again, this might not the same case as you got experienced, but somebody for the future.

this just happened to me. None of the answers helped, as the issue was I have recently changed the target host configuration and put incorrect host value there. So it could just be wrong connection details as well.

I faced this error after updating my network adapter configuration (migration to a NIC coupled network by PowerShell commandlet New-NetSwitchTeam). My guess is, that something in the java configuration must be adapted to reflect this change to the java system. But it is unclear where the changes should take place. I am investigating further.

Related