Меню

08001 ошибка при попытке подсоединения java net unknownhostexception

All right—I’ve figured it out.

First off, @Mark B was right—the issue was that I hadn’t yet made the database itself publicly accessible via the VPC security group of which it was a member. To do this, from the database detail screen in AWS, I:

  1. clicked (what for me was the one and only) link beneath the «VPC security groups» of the database’s dashboard, which directed me to the EC2 Security Groups screen
  2. clicked the security group link related to my database, which directed me to that group’s detail page
  3. clicked the «Edit inbound rules» button which directed me to the «Edit inbound rules» screen
  4. clicked the «Add rule» button, which caused a table row containing the following columns: «Type», «Protocol,» «Port Range,» «Source,» «Description — optional»
  5. selected «PostgreSQL» for the «Type» column, which caused the values of «TCP» and «5432» to populate the «Protocol» and «Port range» columns respectively, entered my machine’s IP address («123.456.789.012/32»—no quotes and no parentheses), and left «Description — optional» blank, because, well, it’s optional.

Finally, I guess I’d forgotten to explicitly name the database, and so my attempts to enter what for me was ostensibly the database’s name (that is, «database-1») resulted in a connection error indicating that «database-1» does not exist. So, for the sake of ease and simply verifying my database connection, I entered «postgres» as the database name in my database client (I’m presently using DataGrip), because «postgres» is the de facto name of a postgreSQL database.

And that should work. I’m sure this is all no-brainer stuff to those more experienced with AWS, but it’s new to me and presumably to many others.

Thanks again, @Mark B, for sending me down the right path.

All right—I’ve figured it out.

First off, @Mark B was right—the issue was that I hadn’t yet made the database itself publicly accessible via the VPC security group of which it was a member. To do this, from the database detail screen in AWS, I:

  1. clicked (what for me was the one and only) link beneath the «VPC security groups» of the database’s dashboard, which directed me to the EC2 Security Groups screen
  2. clicked the security group link related to my database, which directed me to that group’s detail page
  3. clicked the «Edit inbound rules» button which directed me to the «Edit inbound rules» screen
  4. clicked the «Add rule» button, which caused a table row containing the following columns: «Type», «Protocol,» «Port Range,» «Source,» «Description — optional»
  5. selected «PostgreSQL» for the «Type» column, which caused the values of «TCP» and «5432» to populate the «Protocol» and «Port range» columns respectively, entered my machine’s IP address («123.456.789.012/32»—no quotes and no parentheses), and left «Description — optional» blank, because, well, it’s optional.

Finally, I guess I’d forgotten to explicitly name the database, and so my attempts to enter what for me was ostensibly the database’s name (that is, «database-1») resulted in a connection error indicating that «database-1» does not exist. So, for the sake of ease and simply verifying my database connection, I entered «postgres» as the database name in my database client (I’m presently using DataGrip), because «postgres» is the de facto name of a postgreSQL database.

And that should work. I’m sure this is all no-brainer stuff to those more experienced with AWS, but it’s new to me and presumably to many others.

Thanks again, @Mark B, for sending me down the right path.

Когда я пытаюсь подключиться к экземпляру базы данных PostgreSQL, которую я создал согласно руководству AWS «Создание и подключение к базе данных PostgreSQL с Amazon RDS», расположенному здесь ( https://aws.amazon.com/getting-started/tutorials/create-connect-postgresql-db/ ), Я получаю сообщение об ошибке:

[08001] Попытка подключения не удалась. java.net.SocketTimeoutException: время ожидания подключения истекло.

База данных настроена на разрешение входящего и исходящего трафика на всех портах и ​​со всех IP-адресов. Я совершенно не понимаю, как заставить это работать, и обратился в службу поддержки AWS за их предложениями, но пока что все, что я сделал, — это следовал инструкциям, предписанным в руководстве по AWS, — безрезультатно.

Кто-нибудь знает, в чем может быть проблема?

Изменить: я должен упомянуть, что весь мой URL-адрес хоста, номер порта, имя базы данных и т. Д. Были правильно введены в DataGrip, поэтому ни одна из вышеперечисленных проблем не является проблемой.

1 ответ

Лучший ответ

Хорошо — я понял.

Во-первых, @Mark B был прав — проблема заключалась в том, что я еще не сделал саму базу данных общедоступной через группу безопасности VPC, членом которой он был. Для этого на подробном экране базы данных в AWS я:

  1. нажал (что для меня было единственной) ссылку под «Группы безопасности VPC» на панели управления базы данных, которая направила меня на экран «Группы безопасности EC2»
  2. щелкнул ссылку группы безопасности, относящуюся к моей базе данных, которая направила меня на страницу сведений об этой группе
  3. нажал кнопку «Изменить правила для входящих подключений», которая направила меня на экран «Изменить правила для входящих подключений».
  4. нажал кнопку «Добавить правило», в результате чего появилась строка таблицы, содержащая следующие столбцы: «Тип», «Протокол», «Диапазон портов», «Источник», «Описание — необязательно»
  5. выбрал «PostgreSQL» для столбца «Тип», в результате чего значения «TCP» и «5432» заняли соответственно столбцы «Протокол» и «Диапазон портов», ввел IP-адрес моей машины («123.456.789.012/32» — без кавычек и скобок) и оставил поле «Описание — необязательно» пустым, потому что это необязательно.

Наконец, я думаю, что забыл явно назвать базу данных, и поэтому мои попытки ввести то, что для меня было якобы именем базы данных (то есть «база данных-1»), привели к ошибке соединения, указывающей, что «база данных-1» не существует. Итак, для простоты и простой проверки подключения к базе данных я ввел «postgres» в качестве имени базы данных в моем клиенте базы данных (в настоящее время я использую DataGrip), потому что «postgres» — это фактическое имя базы данных postgreSQL.

И это должно сработать. Я уверен, что это несложно для тех, кто более опытен с AWS, но это ново для меня и, предположительно, для многих других.

Еще раз спасибо, @Mark B, за то, что направил меня по правильному пути.


2

Michael P.
11 Дек 2020 в 01:52

какие шаги я должен предпринять для решения ошибки:

java.net.UnknownHostException: Invalid hostname for server: local

я добавил новое имя виртуального хоста в эмуляторе Android, но результат возвращается к

 java.net.UnknownHostException virtualhostname at 
  java.net.InetAddress.lookUpHostByName(InetAddress.java:506)

когда я набираю URL-адрес virtualhost на своем ПК, он работает на дисплее. Опять же, когда я запускал эмулятор и проверял Logcat, я не мог прочитать или проверить состояние HTTP, если 200, 202 или код ошибки. Он просто вернулся в UnknownHostException

12 ответов


на самом деле исключение говорит о том, что нет известного сервера с именем «local». Я предполагаю, что вы пытаетесь подключиться к локальному компьютеру. Попробуйте с именем хоста "localhost" вместо этого, или, возможно,127.0.0.1 или ::1 (последний-IPv6).

С javadocs:

брошенный, чтобы указать, что IP-адрес
хозяина определить не удалось.

127.0.0.1или ::1 или "localhost" всегда должен быть интерфейс loopback, поэтому, если это не сработает, я был бы очень удивлен.

если в вашей сети действительно есть сервер под названием «local» — проверьте настройки DNS или добавьте его в файл hosts.


у меня была такая же проблема на моем mac. Я нашел проблему, когда я позвала моя $HOSTNAME из терминала и он вернулся ping: cannot resolve myHostName: Unknown host.

решения:

  1. Do echo $HOSTNAME на ваш терминал.
  2. любое имя хоста, которое он показывает (скажем myHostName), попробуйте проверить это : ping myHostName. Если он вернется ping: cannot resolve myHostName: Unknown host затем добавьте запись в свой .
  3. для редактирования /etc/hosts файл и добавить следующий:

    127.0.0.1 myHostName

надеюсь, что это помогает.


java.сеть.UnknownHostException: хост не разрешен:

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

это исключение также возникает, когда вы подключены к действительному wifi, но маршрутизатор не получает интернет. Его очень легко воспроизвести это:

  1. подключение к действительному wifi
  2. теперь удалите кабель из маршрутизатора, пока маршрутизатор подключен

вы обратите внимание на эту ошибку!!

вы не можете действительно решить эту проблему, вы можете только уведомить изящно пользователя. (что — то вроде — «невозможно установить связь»)


Это может произойти по разным причинам

1) Проверьте, подключен ли VPN, вы можете получить эту ошибку иногда, если да

» ваше имя хоста, localhost разрешает адрес обратной связи: 127.0.0.1; используя 10.xxx.1.193 Вместо (на интерфейсе cscotun0)»

2) Проверьте свой $ HOSTNAME

3) Попробуйте ping $HOSTNAME в командной строке, и если он не работает, настройте Системные настройки, чтобы ваш локальный хост отвечал на pings

5

автор: Sidharth N. Kashyap


отсутствует имя хоста. JBoss использует эту переменную среды ($HOSTNAME) при подключении к серверу.

[root@xyz ~]# echo $HOSTNAME
xyz

[root@xyz ~]# ping $HOSTNAME
ping: unknown host xyz

[root@xyz ~]# hostname -f
hostname: Unknown host

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

для взлома, пока вы не сможете окончательно решить эту проблему на своем сервере, вы можете добавить строку до конца вашего файла / etc / hosts:

127.0.0.1 xyz.xxx.xxx.edu xyz

это не относится к вопросу, но этот вопрос появился, когда я гуглил для упомянутого UnknownHostException, и исправление не найдено нигде, поэтому я подумал, что добавлю ответ здесь.

исключение, которое постоянно получалось, было:

java.net.UnknownHostException:  google.com
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    ... 

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

Решение

не зову trim() для строки хоста, содержащей пробелы. При написании прокси-сервера хост был получен из HTTP-заголовков с использованием split(":") точку с запятой для HOST заголовок. Это оставило пробелы и вызывает UnknownHostException как хост с пробелами не является допустимым хостом. Делать host = host.trim() на String host решить неоднозначный вопрос.


попробуйте следующее :

String url = "http://www.google.com/search?q=java";
URL urlObj = (URL)new URL(url.trim());
HttpURLConnection httpConn = 
(HttpURLConnection)urlObj.openConnection();
httpConn.setRequestMethod("GET");
Integer rescode = httpConn.getResponseCode();
System.out.println(rescode);

Trim () URL


попытка подключения к локальному компьютеру.попробуйте вместо этого использовать имя хоста «localhost» или, возможно ::/ — последний-ipv6

1

автор: joshwayne diestro


попробуйте установить переменную среды SPARK_LOCAL_IP на ip-адрес (может быть localhost, т. е. ваш собственный ip-адрес), который вы хотите подключить. Е. Г.

$ export SPARK_LOCAL_IP=182.95.208.152

таким образом, вам не потребуется изменять существующие настройки linux.
Работал на меня, Хоуп тебе тоже помогает.


Connect ваш мобильный телефон с различным подключением wifi с другим поставщиком услуг.
Я не знаю точной проблемы, но я не мог подключиться к серверу с определенным поставщиком услуг, но он работает, когда я подключился к другому поставщику услуг. Так попробуй!


Если ваш файл / etc/localhosts имеет следующую запись:
Добавьте запись имени хоста, как показано ниже:

127.0.0.1 local host (add your hostname here)
::1 (add hostname here) (the last one is IPv6).

Это должно решить проблему.


вы должны заменить [] слишком!

пример [hostname] и вы должны заменить все это чем-то вроде этого:

jdbc:mysql://localhost:3306/openfire

Играя в Minecraft и вообще, пользуясь приложениями, написанными на Java Вы не раз могли столкнуться с ошибками (исключениями). В отличие от других языков программирования, Java жёстко заточена под использование ООП, потому при возникновении ошибки бросается исключение (объект содержащий сведения под ошибке). Его можно «поймать», дабы предпринять какие-то действия (допустим, вывести в лог). В случае майнкрафта, при возникновении исключения, создаётся краш-отчёт и работа игры завершается.

Понять исключения достаточно просто и вам для этого не понадобится специальное ПО для отладки.

2017-10-03_153645.png

Полная печать исключения состоит из 3-х частей:

  1. Исключение — имя класса ошибки. Классам обычно дают понятные человеку имена, достаточно знаний английского, чтобы понять значение.
  2. Сообщение — содержит более детальное описание ошибки. Может отсутствовать.
  3. Стек вызова — отражает ход работы программы (снизу вверх). Данная информация больше полезна разработчику, дабы понять, где именно возникла ошибка. Обычному пользователю данная информация может помочь понять, с чем связана ошибка (по именам классов и вызываемым функциям — методам).

Исключения могут иметь предков, что присутствует в данном примере (после «Caused by» идёт печать исключения-предка). Если вам не понятно исключение, возможно, стоит рассмотреть его предков — они могут содержать более понятное сообщение.

В данной теме я опишу наиболее часто встречающиеся ошибки, а также, какие действия следует или вовсе не следует предпринимать. Причин у ошибок множество и это не всегда повреждённые файлы игры (чего быть в принципе не может, поскольку лаунчер проверяет файлы игры).

При возникновении ошибок не спешите бежать переустанавливать Java и игру! Java — стабильный продукт. В большинстве случаев, ошибки возникают из-за неправильной настройки ОС; ошибок сети; неправильных драйверов.

org.lwjgl.LWJGLException: Pixel format not accelerated
Недоступно аппаратное ускорение графики. Описание ошибки (англ.)

Решение: Установите последнюю версию драйвера видеокарты.

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation/building failed
Не удаётся установить защищённое соединение из-за невозможности проверки SSL сертификата.

Что можно сделать:

  • Эта ошибка может возникнуть из-за использования слишком старой версии Java. Рекомендуется регулярно обновлять ПО, чтобы иметь актуальный список корневых сертификатов.
  • Виновником может быть антивирус, пытающийся «подсунуть» свой сертификат с целью прослушивания трафика. Настоятельно рекомендуется отключить в антивирусе проверку защищённых соединений (HTTPS/SSL/TLS) — это значительно снижает безопасность защищённых соединений и вызывает проблемы в работе приложений, использующие их.

java.net.SocketTimeOutException: Read timed out
Ошибка сети «время ожидания истекло». Здесь сложно установить виновника: проблема может быть как на стороне сервера, вашего провайдера или вызвана антивирусом.

Что можно сделать:

  • Отключите антивирус и попробуйте выполнить запрос снова.
  • Используйте другое подключение к интернету (другой провайдер; мобильный интернет; VPN; Wi-Fi соседей).
  • Используйте VPN для обхода блокировки (цензуры) со стороны вашего интернет-провайдера.

java.net.ConnectException: Connection timed out: connect
Ошибка сети — не удалось установить соединение с хостом. Обычно виновником данной ошибки является Firewall (брандмауэр) или отсутствие интернета.

Что можно сделать:

  • Проверьте наличие подключения к интернету.
  • Временно отключите антивирус и Firewall.

java.net.SocketException: Connection reset / Удаленный хост принудительно разорвал существующее подключение
Ошибка сети «соединение сброшено». Как и в предыдущей ошибке, проблема связана с «плохим» интернетом, либо проблемами на стороне сервера (в этом случае ошибка будет у всех). Чаще всего возникает у пользователей мобильного интернета (USB-модем). От вас никаких действий предпринимать не требуется, кроме как найти «другой интернет» или использовать VPN для обхода фильтра сайтов.

java.lang.ClassCastException: XXX cannot be cast to YYY
Ошибка в логике программы: попытка привести объект к классу, экземпляром коего объект не является.

Решение: Сообщите о проблеме разработчику программы, приложив лог ошибки.

java.io.IOException: Server returned HTTP response code: 000 for URL
Проблема на стороне веб-сервера. Стандартная библиотека Java выбрасывает исключение, если веб-сервер выдаёт, например, страницу «404 Not Found».

Решение: Сообщите о проблеме владельцу веб-сервера, URL которого указан в тексте ошибки.

java.lang.UnsatisfiedLinkError: Can’t load library:
Не удалось загрузить нативную библиотеку (скорее всего, отсутствует файл по указанному пути).

Что можно сделать:

  • Чаще всего ошибка возникает из-за отсутствия библиотек LWJGL. Почему их файлы пропадают, пока остаётся загадкой. Если пути вы видите «.redserver/natives/2.9.1/lwjgl.dll», значит надо удалить папку natives, находящуюся в .redserver, чтобы лаунчер их скачал заново.
    Неактуально: С версии 3.2 лаунчер проверяет наличие всех файлов и автоматически, при необходимости, перекачивает их.

java.lang.RuntimeException: Unknown character in
Синтаксическая ошибка в конфигурационном файле мода.

Что можно сделать:

  • Удалите указанный в ошибке файл. Мод создаст новый с настройками по умолчанию.
  • Если вам сложно удалить файл, можно сделать сброс конфигов через лаунчер. Нажмите в лаунчере на многоточие на кнопке «Играть»; выберите в меню пункт «Очистка клиента»; установите флажок возле «Сбросить конфигурацию» и запустите очистку.
  • Выполните проверку диска на наличие ошибок. Испорченные файлы могут быть признаком неисправности диска.

java.lang.NullPointerException (NPE)
Ошибка в логике программы: попытка вызвать нестатичный метод, обратиться к полю несуществующего объекта — null.

Решение: Сообщите о проблеме разработчику программы, приложив лог ошибки.

java.net.UnknownHostException
Ошибка сети: не удаётся определить IP-адрес доменного имени (в общем, проблемы с DNS).

Что можно сделать:

  • Иногда ошибка может возникать, если вы не подключены к интернету, либо же произошёл разрыв интернет-соединения. Обычно исчезает сама через небольшой промежуток времени после возобновления соединения. Если ошибка не исчезла — может помочь перезагрузка компьютера (сбрасывает кеш DNS).
  • Доступ к ресурсу заблокирован вашим провайдером. Сейчас данная проблема актуальна для украинских пользователей: используемый нами Яндекс.DNS заблокирован в этой стране. Читайте, как обойти блокировку DNS.

java.io.EOFException: Unexpected end of ZLIB input stream
Неожиданный конец файла. В данном случае — ZIP-архива. Возникает например, когда вы пытаетесь распаковать недокачанный архив.

java.net.SocketException: Address family not supported by protocol family: connect
Проблема возникает из-за неправильной настройки протокола IPv6. Если таковой не поддерживается вашим интернет-провайдером, его поддержку следует отключить.

image.png

java.lang.OutOfMemoryError
А вот это как раз «любимая» ошибка про нехватку ОЗУ. Не стоит сразу спешить выставлять память в лаунчере на максимум, потому что дальнейшие действия зависят от сообщения к ошибке:

  • Unable to create new native thread / Metaspace — в вашей системе закончились ресурсы (ОЗУ). Решается только путём завершения всех лишних программ, либо апгрейдом ПК (больше ОЗУ — больше программ можно запустить). Не забывайте, что следует использовать 64-разрядную систему.
  • Java heap space — нехватка размера heap области памяти. Увеличьте лимит памяти в настройках лаунчера.

Дубина Андрей

0 / 0 / 0

Регистрация: 23.12.2018

Сообщений: 10

1

Не могу подключиться к базе данных

06.03.2019, 00:20. Показов 13964. Ответов 1

Метки postgresql (Все метки)


Не могу подключиться к бд на elephantsql.com
Код

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package postgresqlconnect;
import java.sql.*; 
public class connect extends config {
    Connection con;
    void getConnect()
    {
        try{
        Class dbDriver = Class.forName("org.postgresql.Driver");
        con = DriverManager.getConnection(url,login,pass);
            System.out.println("Connect successfull");
        }catch(SQLException | ClassNotFoundException e)
        {
            System.out.println("Connect failed");
            //System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}
Java
1
2
3
4
5
6
7
8
package postgresqlconnect;
public class config {
    String name = "dykyxife";
    String url = "jdbc:postgresql://db.elephantsql.com:5432/dykyxife?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory";
    String pass = "DpLnRDR47yEy6wm5a-m25JeIaRBA1wqB";
    String login = "dykyxife";
            
}

Ошибка

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
org.postgresql.util.PSQLException: Ошибка при попытке подсоединения.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:292)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
    at org.postgresql.Driver.makeConnection(Driver.java:454)
    at org.postgresql.Driver.connect(Driver.java:256)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at postgresqlconnect.connect.getConnect(connect.java:9)
    at postgresqlconnect.PostgresqlConnect.main(PostgresqlConnect.java:6)
Caused by: java.net.SocketTimeoutException: connect timed out
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at org.postgresql.core.PGStream.<init>(PGStream.java:70)
    at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:91)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192)
    ... 8 more

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Эксперт Java

2390 / 2216 / 564

Регистрация: 28.12.2010

Сообщений: 8,658

06.03.2019, 00:32

2

Цитата
Сообщение от Дубина Андрей
Посмотреть сообщение

Caused by: java.net.SocketTimeoutException: connect timed out

на том конце никого нет. По телнету попробуй, скорее всего тоже не выдет.
Адрес db.elephantsql.com:5432 какбэ намекает что тут что-то не так. Вряд ли все могут ломится на один и тот же порт. Один инстанс столько не вывезет. Обычно дают уникальный урл каждому юзеру

PS. хз откуда ты урл этот взял. Там после регистрации дают отдельный урл вида <blabla>.db.elephantsql.com:5432/<blabla>



0



Автор оригинала: baeldung.

1. введение

В этом уроке мы узнаем причину UnknownHostException на примере. Мы также обсудим возможные способы предотвращения и обработки исключения.

2. Когда Возникает исключение?

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

String hostname = "http://locaihost";
URL url = new URL(hostname);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.getResponseCode();

Приведенный выше код вызывает исключение UnknownHostException , поскольку неправильно написанный localhost не указывает ни на какие IP-адреса.

Еще одна возможная причина UnknownHostException это задержка распространения DNS или неправильная конфигурация DNS.

Для распространения новой записи DNS по всему Интернету может потребоваться до 48 часов.

3. Как Это предотвратить?

Предотвращение возникновения исключения в первую очередь лучше, чем последующая обработка. Несколько советов по предотвращению исключения:

  1. Дважды проверьте имя хоста: Убедитесь, что нет опечатки, и обрежьте все пробелы.
  2. Проверьте настройки DNS системы: Убедитесь, что DNS-сервер включен и доступен, и если имя хоста новое, дождитесь, пока DNS-сервер догонит вас.

4. Как с Этим справиться?

UnknownHostException расширяет IOException , которое является проверенным исключением . Как и любое другое проверенное исключение, мы должны либо выбросить его, либо окружить блоком try-catch .

Давайте рассмотрим исключение в нашем примере:

try {
    con.getResponseCode();
} catch (UnknownHostException e) {
    con.disconnect();
}

Рекомендуется закрывать соединение при возникновении UnknownHostException . Большое количество расточительных открытых соединений может привести к тому, что приложению не хватит памяти.

5. Заключение

В этой статье мы узнали, что вызывает UnknownHostException , как его предотвратить и как с ним справиться.

Как всегда, код доступен на Github .


  • Метки


    exception, hostname, server, unknownhostexception

The UnknownHostException is an exception in Java that is thrown to indicate that the IP address of a host could not be determined.

Since the UnknownHostException is a checked exception, it either needs to be thrown or surrounded by a try-catch block in code.

What Causes UnknownHostException

The UnknownHostException occurs when trying to connect to a remote host using its hostname, but the IP address of the host could not be determined. This usually happens because of a typo in the hostname, or because of a DNS misconfiguration or propagation delay.

UnknownHostException Example

Here is an example of an UnknownHostException thrown when trying to connect to an unknown host:

public class UnknownHostExceptionExample {
    public static void main(String[] args) {
        String host = "https://rollbar.co";
        URL url = null;

        try {
            url = new URL(host);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            System.out.println(con.getResponseCode());
        } catch (MalformedURLException mue) {
            mue.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

The above code attempts to connect to a remote host, but has a typo in the hostname. Therefore, running the code throws an UnknownHostException exception:

java.net.UnknownHostException: rollbar.co
    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:567)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333)
    at java.base/java.net.Socket.connect(Socket.java:648)
    at java.base/sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:290)
    at java.base/sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)
    at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:182)
    at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
    at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569)
    at java.base/sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:265)
    at java.base/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:372)
    at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:177)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1194)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1082)
    at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:163)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1600)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1528)
    at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:527)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:308)
    at UnknownHostExceptionExample.main(UnknownHostExceptionExample.java:14)

How to Handle UnknownHostException

Since UnknownHostException is a checked exception, it can be handled by surrounding it with a try-catch block. The earlier example can be updated to handle the exception:

public class UnknownHostExceptionExample {
    public static void main(String[] args) {
        String host = "https://rollbar.co";
        URL url = null;
        HttpURLConnection con = null;

        try {
            url = new URL(host);
            con = (HttpURLConnection) url.openConnection();
            System.out.println(con.getResponseCode());
        } catch (MalformedURLException mue) {
            mue.printStackTrace();
        } catch (UnknownHostException uhe) {
            uhe.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } finally {
            if (con != null) {
                con.disconnect();
            }
        }
    }
}

In the above example, the code that can throw the UnknownHostException is surrounded in a try-catch block. A finally block is also included to close the connection if the UnknownHostException occurs. This is good practice since too many open connections can cause the application to run out of memory.

How to Avoid UnknownHostException

The UnknownHostException can be avoided with the following checks:

  • Valid hostname — The hostname should be double checked to make sure it does not contain any typos or whitespaces.
  • DNS settings — The system DNS settings should be checked to ensure that the DNS server is reachable. If the hostname is new, it may take some time for the DNS server to catch up.

Track, Analyze and Manage Errors With Rollbar

Managing errors and exceptions in your code is challenging. It can make deploying production code an unnerving experience. Being able to track, analyze, and manage errors in real-time can help you to proceed with more confidence. Rollbar automates error monitoring and triaging, making fixing Java errors easier than ever. Sign Up Today!

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • 07e8 код ошибки kia
  • 07e8 код ошибки bmw