java.net.UnknownHostException:服务器的无效主机名:本地


124

我应该采取什么步骤来解决该错误:

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

我在Android模拟器上添加了新的虚拟主机名,但结果返回到

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

当我在PC上键入我的virtualhost URL时,它会显示出来。再说一次,当我在模拟器上运行并检查Logcat时,我无法读取或检查200、202或错误代码号的HTTP状态。它只是返回到UnknownHostException


6
更多的信息将帮助我们解决问题更容易

您是否在代理服务器后面并配置了代理设置?如果是这样,您可能需要排除localhost和其他不需要代理服务器帮助才能解析为有效IP地址的主机。
ass 2013年

我在Android模拟器上添加了新的虚拟主机名,但结果返回到“ java.net.InetAddress.lookUpHostByName(InetAddress.java:506)上的java.net.UnknownHostException虚拟主机名”。当我在PC上键入我的虚拟主机URL时,它会显示出来。再说一次,当我在模拟器上运行并检查Logcat时,我无法读取或检查200、202或错误代码号的HTTP状态。它只是返回到“ UnknownHostException”
David Dimalanta

Answers:


66

真正的例外是,没有名称为“ local”的已知服务器。我的猜测是您正在尝试连接到本地计算机。尝试使用主机名"localhost",或者127.0.0.1或者::1(最后一个是IPv6)。

javadocs

抛出该信号以指示无法确定主机的IP地址。

127.0.0.1或者::1还是"localhost"应该永远是环回接口,所以如果我真的很奇怪不起作用。

如果您的网络上确实有一个名为“本地”的服务器,请检查您的DNS设置或将其添加到主机文件中。


1
在某些实现上,显然,必须重新启动JVM才能使网关/ dns更改生效。
安德烈·拉斯洛(AndréLaszlo)

68

我在Mac上遇到了同样的问题。当我$HOSTNAME从终端ping我并返回时发现了问题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

希望能帮助到你。


想知道它如何在某些机器上开箱即用,在某些机器上我们必须添加主机条目
Skynet

16

java.net.UnknownHostException:主机未解析:

抛出该信号以指示无法确定主机的IP地址。

当您连接到有效的wifi但路由器无法接收互联网时,也会引发此异常。重现此内容非常容易:

  1. 连接到有效的wifi
  2. 现在在插入路由器后从路由器上拔下电缆

您将看到此错误!

您无法真正解决此问题,只能优雅地通知用户。(类似-“无法建立连接”)


1
更普遍地说,当在DNS中找不到主机或找不到DNS本身时(例如由于任何网络连接性原因或配置错误)会引发异常。
洛恩侯爵,

那么如何解决这个问题呢?
cokedude

2
您无法真正解决此问题,只能优雅地通知用户。(类似-“无法建立连接”)
Ash 2014年

在学校网络中出现此问题意味着什么,但在家里没有我的个人联系意味着什么?
硝酸钠

@sodiumnitrate可能是您的学校网络需要首先进行一些id / pwd身份验证。.尝试在浏览器中打开任何Web网址,看看是否正确显示了该内容
Ash

7

这不是特定于问题的,但是当我在Google上搜索提到的时出现了此问题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解决了模棱两可的问题上做一个。


这是我的问题。
Sterling Diaz

1
谢谢-这救了我。在我的情况下,传递给该函数的String主机具有\ n后缀,因此.trim()在该主机上运行对我来说就是固定的!
rayzinnz

1
谢谢,我花了太多时间试图找出问题所在,直到我意识到我在两个不同的IP地址之间键入了空格。
Sandoval0992

5

可能由于各种原因而发生

1)检查您是否已连接VPN,有时会出现此错误

“您的主机名localhost解析为回送地址:127.0.0.1;而是使用10.xxx.1.193(在cscotun0接口上)”

2)检查您的$ HOSTNAME

3)尝试在命令行上ping $ HOSTNAME,如果它不起作用,请调整系统设置,以使本地主机响应ping。


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


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

Trim()URL


修剪没有空格的硬编码字符串毫无意义。
布莱克·麦克布莱德


1

请尝试将SPARK_LOCAL_IP环境变量设置为要连接的IP地址(可以是localhost,即您自己的IP地址)。例如

$ export SPARK_LOCAL_IP=182.95.208.152

这样,您将不需要更改现有的linux设置。为我工作,希望也能为您服务。


0

通过不同的wifi连接您的手机与不同的服务提供商连接。我不知道确切的问题,但是我无法使用特定的服务提供商连接到服务器,但是当我连接到其他服务提供商时它可以工作。试试吧!


0

当我获取链接格式无效的xml文件时,在我的android应用中遇到了这个问题,我重新格式化了完整的url并成功了。



-1

如果您的/ etc / localhosts文件具有如下条目:添加主机名条目如下:

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

这样可以解决问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.