1. Введение
В этом руководстве мы узнаем причину UnknownHostException
на примере. Мы также обсудим возможные способы предотвращения и обработки исключения.
2. Когда возникает исключение?
UnknownHostException
указывает, что IP-адрес имени хоста не может быть определен. Это может произойти из-за опечатки в имени хоста:
String hostname = "http://locaihost";
URL url = new URL(hostname);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.getResponseCode();
Вышеприведенный код генерирует исключение UnknownHostException
, поскольку locaihost
с ошибкой не указывает ни на какие IP-адреса.
Другой возможной причиной UnknownHostException
является задержка распространения DNS или неправильная конфигурация DNS.
Распространение новой записи DNS по всему Интернету может занять до 48 часов.
3. Как это предотвратить?
Предотвратить возникновение исключения в первую очередь лучше, чем обрабатывать его позже. Несколько советов по предотвращению исключения:
- Дважды проверьте имя хоста: убедитесь, что в нем нет опечатки, и обрежьте все пробелы.
- Проверьте настройки DNS системы: убедитесь, что DNS-сервер включен и доступен, а если имя хоста новое, подождите, пока DNS-сервер наверстает упущенное.
4. Как с этим справиться?
UnknownHostException
расширяет IOException
, который является проверенным исключением . Подобно любому другому проверенному исключению, мы должны либо выдать его, либо окружить блоком try-catch
.
Давайте обработаем исключение в нашем примере:
try {
con.getResponseCode();
} catch (UnknownHostException e) {
con.disconnect();
}
Хорошей практикой является закрытие соединения при возникновении исключения UnknownHostException
. Большое количество бесполезных открытых подключений может привести к нехватке памяти для приложения.
5. Вывод
В этой статье мы узнали, что вызывает UnknownHostException
, как его предотвратить и как с ним справиться.
Как всегда, код доступен на Github .