1

到目前为止,我总是使用以下方法来获取我的 IP 地址:

InetAddress.getLocalHost().getHostAddress()

上述方法适用于 Windows,但在 linux 上我总是得到127.0.1.1我的 IP 地址。

我究竟做错了什么?

4

2 回答 2

4

我在互联网上找到了一些可以解决您的问题的代码:

String hostName = InetAddress.getLocalHost().getHostName();

InetAddress addrs[] = InetAddress.getAllByName(hostName);

String myIp = "UNKNOWN";
for (InetAddress addr: addrs) {
  System.out.println ("addr.getHostAddress() = " + addr.getHostAddress());
  System.out.println ("addr.getHostName() = " + addr.getHostName());
  System.out.println ("addr.isAnyLocalAddress() = " + addr.isAnyLocalAddress());
  System.out.println ("addr.isLinkLocalAddress() = " + addr.isLinkLocalAddress());
  System.out.println ("addr.isLoopbackAddress() = " + addr.isLoopbackAddress());
  System.out.println ("addr.isMulticastAddress() = " + addr.isMulticastAddress());
  System.out.println ("addr.isSiteLocalAddress() = " + addr.isSiteLocalAddress());
  System.out.println ("");

  if (!addr.isLoopbackAddress() && addr.isSiteLocalAddress()) {
    myIp = addr.getHostAddress();
  }
}

来源:http ://www.exampledepot.com/egs/java.net/Local.html

您的代码的基本区别是检查了所有 IP 地址。

于 2012-08-24T08:08:12.410 回答
0

您的应用程序是否使用安全管理器?如果 getLocalHost 无法连接到您的地址,它将返回环回地址。

于 2012-08-24T08:16:28.887 回答