java.net.UnknownHostException: Nieprawidłowa nazwa hosta dla serwera: lokalny


124

Jakie kroki powinienem podjąć, aby rozwiązać błąd:

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

Dodałem nową nazwę hosta wirtualnego w emulatorze Androida, ale wynik wraca do

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

Kiedy wpisuję adres URL mojego virtualhosta na moim komputerze, działa on na wyświetlaczu. Z drugiej strony, kiedy uruchomiłem emulator i sprawdziłem Logcat, nie mogłem odczytać ani sprawdzić statusu HTTP, jeśli 200, 202 lub numer kodu błędu. Po prostu wrócił doUnknownHostException


6
trochę więcej informacji pomogłoby nam łatwiej rozwiązać problem
zacisk

Czy jesteś za serwerem proxy i skonfigurowałeś ustawienia proxy? Jeśli tak, może być konieczne wykluczenie hosta lokalnego i innych hostów, które nie potrzebują pomocy serwera proxy, aby uzyskać prawidłowy adres IP.
asgs

Dodałem nową nazwę hosta wirtualnego w emulatorze Androida, ale wynik wraca do „java.net.UnknownHostException virtualhostname at java.net.InetAddress.lookUpHostByName (InetAddress.java:506)”. Kiedy wpisuję adres URL mojego virtualhosta na moim komputerze, działa on na wyświetlaczu. Z drugiej strony, kiedy uruchomiłem emulator i sprawdziłem Logcat, nie mogłem odczytać ani sprawdzić statusu HTTP, jeśli 200, 202 lub numer kodu błędu. Po prostu powrócił do „UnknownHostException”
David Dimalanta

Odpowiedzi:


66

Wyjątkiem jest tak naprawdę, że nie ma znanego serwera o nazwie „lokalny”. Domyślam się, że próbujesz połączyć się z komputerem lokalnym. Spróbuj "localhost"zamiast tego z nazwą hosta , a może 127.0.0.1lub ::1(ostatnia to IPv6).

Z javadocs :

Zgłoszony, aby wskazać, że nie można określić adresu IP hosta.

127.0.0.1lub ::1lub "localhost"powinien zawsze być interfejsem sprzężenia zwrotnego, więc jeśli to nie zadziała, byłbym naprawdę zaskoczony.

Jeśli naprawdę w Twojej sieci istnieje serwer o nazwie „lokalny” - sprawdź ustawienia DNS lub dodaj go do pliku hosts.


1
W niektórych implementacjach najwyraźniej ponowne uruchomienie maszyny JVM może być konieczne, aby zmiany bramy / DNS zaczęły obowiązywać.
André Laszlo

69

Miałem ten sam problem na moim Macu. Znalazłem problem, gdy pingowałem mój $HOSTNAMEz terminala i wrócił ping: cannot resolve myHostName: Unknown host.

Rozwiązać:

  1. Zrób echo $HOSTNAMEna swoim terminalu.
  2. Cokolwiek hostname to pokazuje (powiedzmy myHostName), spróbuj go Ping: ping myHostName. Jeśli zwróci, ping: cannot resolve myHostName: Unknown hostdodaj wpis do /etc/hostspliku.
  3. Dla tego /etc/hostspliku edycji i dodaj:

    127.0.0.1 myHostName

Mam nadzieję, że to pomoże.


Ciekawe, jak to działa na niektórych maszynach po wyjęciu z pudełka, a na niektórych musimy dodać wpis hostów
Skynet

16

java.net.UnknownHostException: Host nie został rozwiązany:

Zgłoszony, aby wskazać, że nie można określić adresu IP hosta.

Ten wyjątek jest również zgłaszany, gdy masz połączenie z prawidłowym Wi-Fi, ale router nie odbiera Internetu. Bardzo łatwo to odtworzyć:

  1. Połącz się z prawidłowym Wi-Fi
  2. Teraz wyjmij kabel z routera, gdy router jest podłączony

Zauważysz ten błąd !!

Naprawdę nie możesz tego rozwiązać, możesz tylko z wdziękiem powiadomić użytkownika. (coś w rodzaju - „Nie można nawiązać połączenia”)


1
Bardziej ogólnie byłoby powiedzieć, że wyjątek jest zgłaszany, gdy host nie jest znaleziony w DNS lub gdy nie można znaleźć samego DNS, np. Z jakiegokolwiek powodu połączenia sieciowego lub błędnej konfiguracji.
Markiz Lorne

Jak więc rozwiązać ten problem?
Cokedude

2
Naprawdę nie możesz tego rozwiązać, możesz tylko z wdziękiem powiadomić użytkownika. (coś w rodzaju - „Nie można nawiązać połączenia”)
Ash

Co to znaczy mieć ten problem w sieci szkolnej, ale nie mam połączenia osobistego w domu?
azotan sodu

@sodiumnitrate Może to być sieć Twojej szkoły, która wymaga najpierw uwierzytelnienia id / pwd. Spróbuj otworzyć dowolny adres URL w przeglądarce i sprawdź, czy jest poprawnie wyświetlany
Ash

7

To nie jest specyficzne dla pytania, ale to pytanie pojawiło się, gdy szukałem w Google wspomnianego UnknownHostException , a poprawki nie znaleziono nigdzie indziej, więc pomyślałem, że dodam tutaj odpowiedź.

Wyjątkiem, który był stale otrzymywany, był:

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

Bez względu na to, jak próbowałem połączyć się z jakimkolwiek prawidłowym hostem, wydrukowanie go w terminalu również nie pomogłoby. Wszystko było dobrze.

Rozwiązanie

Brak wywołania trim() ciągu hosta zawierającego białe znaki . Pisząc serwer proxy, host został uzyskany z nagłówków HTTP przy użyciu split(":")średników w HOSTnagłówku. Pozostawiło to białe spacje i powoduje, że UnknownHostExceptionjako host z białymi znakami nie jest prawidłowym hostem. Robi host = host.trim()na String hostrozwiązało problemu niejednoznaczne.


To był mój problem.
Sterling Diaz

1
Dziękuję - to mnie uratowało. W moim przypadku host String przekazywany do funkcji miał przyrostek \ n, więc uruchomienie .trim()tego rozwiązania rozwiązało problem!
rayzinnz

1
Dzięki, spędziłem zbyt dużo czasu, próbując dowiedzieć się, na czym polega problem, dopóki nie zdałem sobie sprawy, że wpisałem puste miejsce między dwoma różnymi adresami IP.
Sandoval0992

5

Może się to zdarzyć z różnych powodów

1) Sprawdź, czy masz podłączony VPN, czasami możesz otrzymać ten błąd, jeśli tak

„Twoja nazwa hosta, localhost jest tłumaczona na adres sprzężenia zwrotnego: 127.0.0.1; zamiast tego używa 10.xxx.1.193 (na interfejsie cscotun0)”

2) Sprawdź swój $ HOSTNAME

3) spróbuj pingować $ HOSTNAME w linii poleceń, a jeśli to nie zadziała, dostosuj ustawienia systemowe, aby Twój lokalny host odpowiadał na pingi


5

Brakuje Twojej nazwy hosta. JBoss używa tej zmiennej środowiskowej ($ HOSTNAME), kiedy łączy się z serwerem.

[root@xyz ~]# echo $HOSTNAME
xyz

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

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

Jest wiele rzeczy, które mogą to powodować. Prosimy o komentarz, jeśli odkryjesz nowy powód.

Aby się zhakować, dopóki nie będziesz mógł trwale rozwiązać tego problemu na swoim serwerze, możesz dodać wiersz na końcu pliku / etc / hosts:

127.0.0.1 xyz.xxx.xxx.edu xyz

Konserwacja zapobiegawcza
MacGyver

4

Spróbuj wykonać następujące czynności:

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

Przytnij () adres URL


Przycinanie zakodowanego na stałe ciągu bez spacji nie ma sensu.
Blake McBride

1

Próbuję połączyć się z lokalnym komputerem. Spróbuj zamiast tego z nazwą hosta „localhost” lub może :: / - ostatnią z nich jest ipv6


1

Spróbuj ustawić zmienną środowiskową SPARK_LOCAL_IP na adres IP (może to być localhost, czyli Twój własny adres IP), z którym chcesz się połączyć. Na przykład

$ export SPARK_LOCAL_IP=182.95.208.152

W ten sposób nie będziesz musiał zmieniać istniejących ustawień Linuksa. Pracował dla mnie, nadzieja też pomaga.


0

Połącz swój telefon komórkowy z innym połączeniem Wi-Fi z innym dostawcą usług . Nie znam dokładnego problemu, ale nie mogłem połączyć się z serwerem u określonego usługodawcy, ale działa, gdy połączę się z innym usługodawcą. Więc spróbuj!


0

Miałem ten problem w mojej aplikacji na Androida, gdy pobierałem plik xml, format mojego linku był nieprawidłowy, sformatowałem z pełnym adresem URL i zadziałało.


0

Jeśli jesteś tutaj, ponieważ emulator zapewnia ten wyjątek, przejdź do Narzędzia> Menedżer AVD w emulatorze systemu Android i uruchamiaj na zimno emulator.


-1

Jeśli twój plik / etc / localhosts zawiera wpis jak poniżej: Dodaj wpis nazwy hosta jak poniżej:

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

To powinno rozwiązać problem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.