2011-06-26 130 views
92

什麼是我應該採取解決錯誤的步驟:的java.net.UnknownHostException:服務器的主機名無效:本地

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

我添加新的虛擬主機名在Android模擬器,但結果返回到

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

當我在我的電腦上鍵入我的虛擬主機URL時,它在顯示器上工作。然後再次,當我在Emulator上運行並檢查Logcat時,如果200,202或錯誤代碼號碼無法讀取或檢查HTTP狀態。它簡單地返回到UnknownHostException

+5

一個比特的信息將幫助我們解決問題更容易 – clamp

+0

你是代理服務器後面配置的代理服務器設置?如果是這樣,您可能需要排除本地主機和其他不需要代理服務器幫助解析爲有效IP地址的主機。 – asgs

+0

我在Android模擬器中添加了新的虛擬主機名,但結果返回到「java.net.UnknownHostException virtualhostname at java.net.InetAddress.lookUpHostByName(InetAddress.java:506)」。當我在我的電腦上輸入我的虛擬主機URL時,它會在顯示器上顯示。然後再次,當我在Emulator上運行並檢查Logcat時,如果200,202或錯誤代碼號碼無法讀取或檢查HTTP狀態。它簡單地返回到「UnknownHostException」 –

回答

51

什麼例外實際上是說沒有已知的服務器名稱爲「本地」。我的猜測是你正嘗試連接到本地計算機。嘗試使用主機名"localhost",或者使用127.0.0.1::1(最後一個是IPv6)。

javadocs

Thrown to indicate that the IP address of a host could not be determined.

127.0.0.1::1"localhost"應始終是loopback接口,因此,如果不工作,我會很驚訝。

如果您的網絡上確實存在名爲「本地」的服務器,請檢查您的DNS設置或將其添加到您的主機文件中。

+1

在某些實現中,顯然,網關/ dns更改生效可能需要重啓JVM。 –

16

java.net.UnknownHostException: Host is unresolved:

拋出以表明無法確定主機的IP地址。

當您連接到有效的無線網絡但路由器未接收到互聯網時,也會引發此異常。它很容易重現此:

  1. 連接到一個有效的WiFi
  2. 而路由器pluged,在現在從路由器移除電纜

您會發現這個錯誤!

你不能真正解決這個問題,你只能優雅地通知用戶。 (類似 - 「無法建立連接」)

+1

比較一般地說,當在DNS中找不到主機或者當找不到DNS本身時,引發異常。 *任何*網絡連接原因或錯誤配置。 – EJP

+0

那麼你如何解決這個問題呢? – cokedude

+2

你不能真正解決這個問題,你只能優雅地通知用戶。 (類似於 - 「無法建立連接」) – Ash

-11

您應該更換[]了!

的例子是[hostname],你用前人的精力像這樣替換這一切:

jdbc:mysql://localhost:3306/openfire 
+10

問題中沒有提及'[]'。你在說什麼? – EJP

+0

是的,對不起。我在OpenBSD OpenFire安裝中討論同樣的錯誤。 – Gaston

1

試圖連接到本地computer.try與主機名「localhost」的替代或者是::/- 最後的一個是IPv6的

5

這可能會發生由於各種原因

1)檢查,如果你有VPN連接,你可能會得到這個錯誤有時如果是

「您的主機名localhost解析爲一個環回地址:127.0.0.1;使用10.xxx.1。193來代替(在接口cscotun0)」

2)檢查您的$ HOSTNAME

3)儘量平$ HOSTNAME關於命令,如果它不工作,調整系統設置,使您的本地主機響應對ping命令

49

我在我的Mac上同樣的問題,我發現這個問題,當我從終端ping通我的$HOSTNAME並返回ping: cannot resolve myHostName: Unknown host

要解決:

  1. 在您的終端上執行echo $HOSTNAME
  2. 無論顯示哪個主機名(可以說myHostName),嘗試ping它:ping myHostName。如果它返回ping: cannot resolve myHostName: Unknown host,則在您的/etc/hosts文件中添加一個條目。
  3. 對於編輯/etc/hosts文件,並添加以下內容:

    127.0.0.1 myHostName

希望它能幫助。

+1

解決了我的問題以及錯誤。謝謝! –

+0

不知道它是如何在一些開箱即用的機器上工作的,有些我們必須添加主機條目 – Skynet

2

這不是特定的問題,但是當我爲所提到的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()爲含有空格主機字符串。在編寫代理服務器時,主機是通過使用split(":")分號的HOST標頭從HTTP頭獲得的。這留下了空白,並導致UnknownHostException作爲主機,而且空白不是有效的主機。在String host上做host = host.trim()解決了這個模棱兩可的問題。

+0

這是我的問題。 –

+0

@SterlingDiaz很高興知道這幫了別人! :) – matrixanomaly

4

您的主機名丟失。 JBoss在連接到服務器時使用這個環境變量($ HOSTNAME)。

[[email protected] ~]# echo $HOSTNAME 
xyz 

[[email protected] ~]# ping $HOSTNAME 
ping: unknown host xyz 

[[email protected] ~]# hostname -f 
hostname: Unknown host 

有幾十件事情可以造成這種情況。請發表評論,如果你發現一個新的原因。

對於一個黑客,直到您可以永久解決您的服務器在這個問題上,你可以將線添加到年底你的/ etc/hosts文件:

127.0.0.1 xyz.xxx.xxx.edu xyz 
+0

預防性維護:http://unix.stackexchange.com/questions/248616/what-is-the-best-way-to-keep-a-linux-servers-hostname-consistent – MacGyver

0

請嘗試設置SPARK_LOCAL_IP環境變量到你想連接的IP地址(可以是本地主機,也就是你自己的IP地址)。例如。

$ export SPARK_LOCAL_IP=182.95.208.152

你將不會被要求改變現有的Linux設置這種方式。 爲我工作,希望可以幫助你。

-1

如果你的/ etc/localhosts文件中有如下條目: 添加如下主機名條目:

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

這應該解決這個問題。

0

嘗試以下方法:多

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

相關問題