Сетевой код иногда выдает UnknownHostException

Я пытаюсь получить данные с сервера. Иногда мой код не работает из-за ошибки UnknownHostException. Почему это? В чем причина этой проблемы?


person TCM    schedule 25.05.2010    source источник
comment
Исключение UnknownHostException возникает, если возникает исключение java.net.UnknownHostException при создании соединения с удаленным хостом для вызова удаленного метода. Что-то не решается на уровне DNS, это не проблема java или xml.   -  person    schedule 25.05.2010


Ответы (4)


Это может произойти, если произошел сбой на DNS-сервере. Помимо повышения надежности DNS-сервера или поиска другого, вы также можете просто использовать полный IP-адрес вместо имени хоста. Таким образом, ему не нужно искать IP-адрес на основе имени хоста. Однако я бы предпочел решить проблему с DNS и предпочел бы DNS, поскольку IP-адреса могут время от времени меняться.

person BalusC    schedule 25.05.2010
comment
Спасибо BalusC :). Отлично, вы дали ip. Теперь сам DNS не входит в картину. Но это не работает. Теперь я получаю эту ошибку: - java.io.FileNotFoundException: 216.115.98.240/rss/india - person TCM; 25.05.2010
comment
Даже когда я набираю 216.115.98.240/rss/india, я ничего не получаю. Это правильный айпи? Когда я сделал ping, я получил этот IP-адрес 216.115.97.236. Однако и в этом случае я получаю такое же исключение в java, а в браузере также ничего не отображается. - person TCM; 25.05.2010

UnknownHostException указывает, что указанный хост не может быть преобразован в IP-адрес. Это вполне может быть проблема с вашим DNS-сервером.

person Mark Peters    schedule 25.05.2010
comment
Хорошо, MarkPeters, так как мне решить эту проблему? так как я должен представить свою работу в колледже, и я не думаю, что смогу получить доступ к маршрутизатору колледжа и изменить в нем DNS-сервер :( - person TCM; 25.05.2010
comment
@Nitesh: Это не работает в среде колледжа или только в вашей локальной среде? Если в среде колледжа возникают непоследовательные сбои, я бы уведомил вашего преподавателя или репетитора о возможной проблеме среды, которая находится вне вашего контроля, а также попытался бы лоббировать ИТ-персонал вашего колледжа, чтобы диагностировать и устранить проблему. Вы можете рассмотреть подход, при котором вы перехватываете исключение и повторяете попытку несколько раз, возможно, с интервалом в несколько секунд/минут. - person Mark Peters; 25.05.2010
comment
//Переопределить настройки DNS системы с помощью бесплатного DNS-сервера Google System.setProperty(sun.net.spi.nameservice.nameservers, 8.8.8.8); System.setProperty(sun.net.spi.nameservice.provider.1, DNS, Sun); - person ACV; 05.09.2015

Если разрешение DNS периодически дает сбой, перехватите исключение и повторите попытку, пока не получите разрешение имени. Вы можете контролировать только то, что вы можете контролировать... И если вы не можете контролировать/починить DNS-сервер, сделайте свое приложение достаточно надежным, чтобы справиться с причудливым DNS-сервером.

person w.g.    schedule 22.08.2017

Я тоже вижу спорадические UnknownHostExceptions в Java без видимой причины. Решение состоит в том, чтобы просто повторить попытку несколько раз. Вот оболочка для DocumentBuilder.parse, которая делает это:

static Document DocumentBuilder_parse(DocumentBuilder b, String uri) throws SAXException, IOException {
  UnknownHostException lastException = null;
  for (int tries = 0; tries < 2; tries++) {
    try {
      return b.parse(uri);
    } catch (UnknownHostException e) {
      lastException = e;
      System.out.println("Retrying because of: " + e);
      continue;
    }
  }
  throw lastException;
}
person Stefan Reich    schedule 06.04.2019