java.net.UnknownHostException: Недійсне ім'я хоста для сервера: local


124

Які кроки я повинен зробити для вирішення помилки:

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


6
трохи більше інформації допоможе нам вирішити проблему простіше
затисніть

ви позаду проксі-сервера та налаштували настройки проксі-сервера? Якщо це так, вам може знадобитися виключити localhost та інші хости, яким не потрібна допомога проксі-сервера для встановлення дійсної IP-адреси.
асгс

Я додав нове ім’я віртуального хоста в емулятор Android, але результат повертається до "java.net.UnknownHostException virtualhostname на java.net.InetAddress.lookUpHostByName (InetAddress.java:506)". Коли я набираю URL-адресу virtualhost на своєму ПК, він працює на дисплеї. Потім знову, коли я біг на Емулятор і перевіряв Logcat, я не зміг прочитати чи перевірити стан HTTP, якщо 200, 202 або номер коду помилки. Він просто повернувся до "UnknownHostException"
Девід Дімаланта

Відповіді:


66

Виняток насправді говорить про те, що не існує відомого сервера з назвою "local". Я здогадуюсь, що ви намагаєтеся підключитися до локального комп’ютера. Спробуйте "localhost"замість цього імені хоста , або, можливо, 127.0.0.1або ::1(останній - IPv6).

З javadocs :

Викинуто, щоб вказати, що IP-адресу хоста неможливо визначити.

127.0.0.1або ::1або "localhost"завжди повинен бути інтерфейсом зворотного зв'язку, тому якщо це не працює, я був би дуже здивований.

Якщо у вашій мережі дійсно є сервер під назвою "локальний", вивчіть свої налаштування DNS або додайте його до свого хост-файлу.


1
У деяких реалізаціях може бути необхідний перезапуск JVM, щоб зміни шлюзу / dns набули чинності, мабуть.
Андре Ласло

68

У мене було таке ж питання і на моєму комп'ютері. Я знайшов проблему, коли я пінг моїй $HOSTNAMEз терміналу, і він повернувся ping: cannot resolve myHostName: Unknown host.

Щоб вирішити:

  1. Робіть echo $HOSTNAMEна своєму терміналі.
  2. Незалежно ім'я машини він показує (дозволяє сказати myHostName), спробуйте пінгувати його: ping myHostName. Якщо він повертається, ping: cannot resolve myHostName: Unknown hostтоді додайте запис у свій /etc/hostsфайл.
  3. Для цього відредагуйте /etc/hostsфайл та додайте наступне:

    127.0.0.1 myHostName

Сподіваюся, це допомагає.


Цікаво, як це працює на деяких машинах поза коробкою, а на деяких ми маємо додати запис хостів
Skynet

16

java.net.UnknownHostException: Хост не вирішений:

Викинуто, щоб вказати, що IP-адресу хоста неможливо визначити.

Цей виняток також виникає, коли ви підключені до дійсного wifi, але маршрутизатор не отримує Інтернет. Відтворити це дуже просто:

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

Ви помітите цю помилку !!

Ви не можете реально вирішити це питання, ви можете лише сповістити користувача про це. (щось на зразок - "Неможливо встановити з'єднання")


1
Більш загальним було б сказати, що виняток створюється, коли хост не знайдений у DNS або коли сам DNS неможливо знайти, наприклад, з будь-якої причини підключення до мережі або неправильної конфігурації.
Маркіз Лорн

То як виправити цю проблему?
кокедуд

2
Ви не можете реально вирішити це питання, ви можете лише сповістити користувача про це. (щось на зразок - "Неможливо встановити зв'язок")
Еш,

Що означає мати цю проблему в шкільній мережі, але не в особистому зв’язку вдома?
натрійнітрат

@sodiumnitrate Можливо, ваша шкільна мережа потребує спочатку автентифікації id / pwd. Спробуйте відкрити будь-який веб-URL у веб-переглядачі та перевірте, чи правильно відображено
Еш

7

Це не конкретно для запитання, але це запитання з’явилося, коли я гуглив за згаданими 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вирішити неоднозначне питання.


Це була моя проблема.
Стерлінг Діаз

1
Дякую - це мене врятувало. У моєму випадку хост String, переданий функції, мав суфікс \ n, тому запуск .trim()якого виправив для мене!
rayzinnz

1
Дякую, я витратив надто багато зусиль, щоб зрозуміти, у чому проблема, поки я не зрозумів, що я набрав порожній пробіл між двома різними IP-адресами.
Sandoval0992

5

Це може статися через різні причини

1) Перевірте, чи у вас підключений VPN, іноді ви можете отримати цю помилку, якщо так

"Ваше ім'я хоста, localhost вирішує адресу зворотного зв'язку: 127.0.0.1; замість цього використовується 10.xxx.1.193 (на інтерфейсі cscotun0)"

2) Перевірте свій $ HOSTNAME

3) спробуйте пінг $ HOSTNAME в командному рядку, і якщо це не працює, налаштуйте системні налаштування, щоб ваш локальний хост відповідав на pings


5

Ваше ім'я хоста відсутнє 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

Профілактичне обслуговування: unix.stackexchange.com/questions/248616/…
MacGyver

4

Спробуйте наступне:

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);

Обріжте () URL-адресу


Обрізка жорстко закодованого рядка без пробілів не має сенсу.
Блейк МакБрайд

1

Спроба підключитися до вашого локального комп'ютера.try замість імені хоста "localhost" замість цього або, можливо, :: / - останній - ipv6


1

Спробуйте встановити змінну середовища SPARK_LOCAL_IP на ip-адресу (може бути localhost, тобто вашу власну ip-адресу), яку ви хочете підключити. Напр

$ export SPARK_LOCAL_IP=182.95.208.152

Таким чином від вас не буде потрібно змінювати існуючі параметри Linux. Працював для мене, сподівання допомагає і вам.


0

Підключіть свій мобільний телефон за допомогою іншого з'єднання Wi-Fi з різним постачальником послуг . Я не знаю точної проблеми, але я не зміг підключитися до сервера з певним постачальником послуг, але він працює, коли я підключений до іншого постачальника послуг. Тож спробуйте!


0

У мене виникла ця проблема в моєму додатку для Android, коли захопили файл XML, формат мого посилання був недійсним, я переформатувався з повною URL-адресою, і він працював.


0

Якщо ви знаходитесь тут, тому що ваш емулятор дає вам це виняток, перейдіть до Інструменти> AVD Manager у вашому емуляторі Android та завантажте емулятор Cold.


-1

Якщо ваш / etc / localhosts файл має запис, як показано нижче: Додати запис імені хоста, як показано нижче:

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

Це має вирішити проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.