【问题标题】:java.net.UnknownHostException: Invalid hostname for server: localjava.net.UnknownHostException:服务器的主机名无效:本地
【发布时间】:2011-09-22 23:30:10
【问题描述】:

我应该采取哪些步骤来解决错误:

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

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

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

当我在我的 PC 上键入我的虚拟主机 URL 时,它会显示。再说一次,当我在 Emulator 上运行并检查 Logcat 时,如果 200、202 或错误代码号,我无法读取或检查 HTTP 状态。直接返回UnknownHostException

【问题讨论】:

  • 更多信息将帮助我们更轻松地解决问题
  • 您是否在代理服务器后面并配置了代理设置?如果是这样,您可能需要排除 localhost 和其他不需要代理服务器帮助解析为有效 IP 地址的主机。
  • 我在 Android 模拟器中添加了新的虚拟主机名,但结果返回“java.net.InetAddress.lookUpHostByName(InetAddress.java:506) 处的 java.net.UnknownHostException virtualhostname”。当我在我的 PC 上键入我的虚拟主机 URL 时,它会显示。再说一次,当我在 Emulator 上运行并检查 Logcat 时,如果 200、202 或错误代码号,我无法读取或检查 HTTP 状态。它只是返回到“UnknownHostException”

标签: java


【解决方案1】:

我在我的 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

希望对你有帮助。

【讨论】:

  • 想知道它在一些开箱即用的机器上是如何工作的,而在一些机器上我们必须添加主机条目
  • @Skynet 取决于我猜的 linux 发行版
【解决方案2】:

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

来自javadocs

抛出表明IP地址 无法确定主机。

127.0.0.1::1"localhost"应该始终是环回接口,所以如果这不起作用,我会感到非常惊讶。

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

【讨论】:

  • 在某些实现中,显然需要重启 JVM 才能使网关/dns 更改生效。
【解决方案3】:

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

抛出表示无法确定主机的IP地址。

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

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

你会看到这个错误!!

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

【讨论】:

  • 更一般的说法是,当在 DNS 中找不到主机或找不到 DNS 本身时引发异常,例如出于任何网络连接原因或配置错误。
  • 那么你如何解决这个问题?
  • 你无法真正解决这个问题,你只能优雅地通知用户。 (类似于 - “无法建立连接”)
  • 在学校网络中出现此问题但在家中没有我的个人连接是什么意思?
  • @sodiumnitrate 可能是您的学校网络首先需要一些 id/pwd 身份验证。尝试在浏览器中打开任何网址,看看是否正确显示
【解决方案4】:

这不是特定于问题的,但是当我在谷歌上搜索提到的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 作为带有空白的主机不是有效的主机。在String host 上执行host = host.trim() 解决了这个模棱两可的问题。

【讨论】:

  • 谢谢你——这救了我。在我的情况下,传递给函数的字符串主机有一个 \n 后缀,所以在上面运行 .trim() 为我修复了它!
  • 谢谢,我花了太多时间试图找出问题所在,直到我意识到我在两个不同的 IP 地址之间输入了一个空格。
【解决方案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

【讨论】:

【解决方案6】:

这可能由于各种原因而发生

1) 检查您是否连接了 VPN,如果是,有时可能会出现此错误

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

2) 检查您的 $HOSTNAME

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

【讨论】:

    【解决方案7】:

    尝试以下方法:

    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() 网址

    【讨论】:

    • 修剪没有空格的硬编码字符串是没有意义的。
    【解决方案8】:

    尝试连接到您的本地计算机。尝试使用主机名“localhost”或 ::/ - 最后一个是 ipv6

    【讨论】:

      【解决方案9】:

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

      $ export SPARK_LOCAL_IP=182.95.208.152

      这样您就不需要更改现有的 linux 设置。 为我工作,希望对你也有帮助。

      【讨论】:

        【解决方案10】:

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

        【讨论】:

          【解决方案11】:

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

          【讨论】:

            【解决方案12】:

            如果您在这里是因为您的模拟器为您提供了该异常,请转到您的 android 模拟器中的工具 > AVD 管理器并冷启动您的模拟器。

            【讨论】:

              【解决方案13】:

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

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

              这应该可以解决问题。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-12-04
                • 2019-03-09
                • 1970-01-01
                • 2017-11-01
                • 2013-09-07
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多