Я пытаюсь получить данные с сервера. Иногда мой код не работает из-за ошибки UnknownHostException
. Почему это? В чем причина этой проблемы?
Сетевой код иногда выдает UnknownHostException
Ответы (4)
Это может произойти, если произошел сбой на DNS-сервере. Помимо повышения надежности DNS-сервера или поиска другого, вы также можете просто использовать полный IP-адрес вместо имени хоста. Таким образом, ему не нужно искать IP-адрес на основе имени хоста. Однако я бы предпочел решить проблему с DNS и предпочел бы DNS, поскольку IP-адреса могут время от времени меняться.
UnknownHostException
указывает, что указанный хост не может быть преобразован в IP-адрес. Это вполне может быть проблема с вашим DNS-сервером.
Если разрешение DNS периодически дает сбой, перехватите исключение и повторите попытку, пока не получите разрешение имени. Вы можете контролировать только то, что вы можете контролировать... И если вы не можете контролировать/починить DNS-сервер, сделайте свое приложение достаточно надежным, чтобы справиться с причудливым DNS-сервером.
Я тоже вижу спорадические 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;
}