java.net.SocketException: сеть недоступна: подключиться - PullRequest
6 голосов
/ 26 июля 2011

Я пытаюсь загрузить текстовый файл 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)

Пожалуйста, ведите меня

Спасибо всем.

Ответы [ 4 ]

10 голосов
/ 26 июля 2011

Вы столкнулись с разрывом соединения.Это происходит в 3G, WiFi или "обычном" соединении на компьютере?

В любом случае, вы должны предполагать, что соединение может время от времени теряться при написании вашего приложения.Например, на мобильных устройствах это часто происходит в трубе, в подвалах и т. Д. В приложениях для ПК это происходит не так часто, но иногда бывает.И чистое сообщение об ошибке, объясняющее, что сеть также недоступна в данный момент.

1 голос
/ 24 января 2018

Я не тестировал ваш код, так что это был бы совершенно другой случай, но все же я хотел бы поделиться своим опытом. (Также это должен быть слишком поздний ответ, хотя, я надеюсь, что этот ответ все же поможет кому-то в будущем)

Недавно я сталкивался с подобным опытом, как вы, например, иногда сеть недоступна, но иногда нет. Короче говоря, причина была слишком малая. Кажется, что Java выдает IOException с сообщением «Сеть недоступна», когда соединение не удается из-за этого. Это было настолько вводящим в заблуждение (я ожидал бы что-то вроде того, чтобы сказать "время ожидания"), и я потратил почти месяц, чтобы обнаружить это.

Здесь я нашел еще один пост о том, как установить время ожидания. Альтернатива java.net.URL для настройки времени ожидания

Опять же, это может быть не тот случай, который вы получили, но кто-то на будущее.

1 голос
/ 18 ноября 2016

Я сталкивался с ситуацией получения java.net.SocketException не иногда, а каждый раз. Я добавил -Djava.net.preferIPv4Stack=true в командную строку Java, и моя программа начала работать правильно.

1 голос
/ 26 июля 2011

«Сеть недоступна» означает именно это. Вы не подключены к сети. Это что-то вне вашей программы. Может быть неправильная настройка ОС, сетевой карты, маршрутизатора и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...