3

所以我在使用InetAddress.getLocalHost.getHostAddress获取给定机器的外部 IP 地址时遇到了问题。

从某种意义上说,我实际上是在 Scala 中这样做的——Akka Remote Actors 的配置文件默认用于InetAddress.getLocalHost.getHostAddress获取机器的 IP 地址,这是我想要的,因为我将在多台机器上部署 Actor。但是,它似乎返回127.0.0.1而不是我想要的外部 IP 地址(因为远程参与者需要通过网络来回通信)。

问题是我不能使用我在谷歌上找到的任何方法来规避这个问题,因为它们似乎都涉及调整代码本身,而在这里我真的没有任何代码可以调整,DSL 只是自动使用InetAddress.getLocalHost.getHostAddress.

我从谷歌搜索中读到了一些线程,你可以通过编辑你的主机文件或其他东西来规避这个问题?我该怎么做呢?

谢谢!-kstruct

4

3 回答 3

3

您可能想要使用NetworkInterface类。

特别是,使用静态getNetworkInterfaces方法枚举所有可用的网络接口。

于 2012-04-18T18:18:56.933 回答
2

检查您的 /etc/hosts 文件。它应该将“localhost”映射到 127.0.0.1,并将您的真实主机名映射到您的真实 IP 地址,或者其中之一:-| 一些 Linux 发行版显然犯了这个错误。

于 2012-04-18T21:42:43.477 回答
0

如果 getLocalHost 不起作用,我得到了部分解决方案。此解决方案的问题是您必须知道网络接口的名称才能匹配真实的名称。也许您可以改进此代码以删除“虚拟”设备和其他东西。

这是 scala 代码,但 java 代码非常相似

  def returnInterfaceAddress() : InetAddress = {
    var myInetAddress = InetAddress.getLocalHost
    val interfaces : util.Enumeration[NetworkInterface] = NetworkInterface.getNetworkInterfaces()
    while(interfaces.hasMoreElements){
      val inter = interfaces.nextElement()
      if(inter.getDisplayName() == "Realtek PCIe GBE Family Controller"){
        myInetAddress = inter.getInetAddresses().nextElement()
      }
    }
    myInetAddress
  }
于 2019-01-24T08:15:49.467 回答