【问题标题】:How to get my ip address? [duplicate]如何获取我的 IP 地址? [复制]
【发布时间】:2011-10-28 12:59:11
【问题描述】:

我有一个 serverSocket,我想知道 IP 地址,但是

listenSocket.getInetAddress().toString();

我得到 0.0.0.0 。 如何获取 IP 地址,或者(如果启用了两个连接)其中之一?

【问题讨论】:

标签: android sockets ip-address


【解决方案1】:

我以前用过这个:

public String getLocalIpAddress() {
    try {
        for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()) {
                    return inetAddress.getHostAddress();
                }
            }
        }
    } catch (SocketException ex) {
        Log.e(LOG_TAG, ex.toString());
    }
    return null;
}

来源:http://www.droidnova.com/get-the-ip-address-of-your-device,304.html

【讨论】:

  • 效果很好!谢谢
  • 正确答案。我认为 inetAddress.isSiteLocalAddress() 会比 !inetAddress.isLoopbackAddress() 更好。
  • @CraigB:我喜欢你的想法——isSiteLocalAddress() 对一个人来说更容易消化。但是使用它,我总是得到 127.0.0.1,即“自我”ip。所以我建议坚持使用 isLoopbackAddress()。
  • 正如@SatishKumar 在另一个答案中指出的那样,如果您只想这样,您将需要使用 InetAddressUtils.isIPv4Address() 来检查 IP。没有这个,您可以收到 IPv6。
  • 对我来说效果不太好,只给了我 IPv6。这个更有帮助stackoverflow.com/questions/6064510/…
【解决方案2】:

如果你得到 0.0.0.0,那可能是因为你的监听套接字正在接受机器所有接口上的连接。通常至少有两个——一个用于与外界通信,一个用于本地主机/环回接口。所以要求一个地址是没有意义的。

一旦您接受传入的连接,您就可以向询问处理它的特定接口的地址。

找到“好”IP 地址的一个快速技巧是与一个已知站点建立传出连接,并在连接后询问其本地端的地址。这样更便于移植而不是枚举网络接口(如果你关心这些事情的话),但当然需要你有一些东西可以连接到你相信它是活跃的并且可以访问的。

【讨论】:

  • 是否有指向包含一些示例代码的 SO 答案的链接?似乎有很多关于这个话题的讨论。我正在尝试找到我的桌面应用程序正在运行的位置。我有地理定位器代码工作,但需要用户外部 IP。谢谢。
  • @Will:一般来说,这些解决方案(我的答案或另一个)只会告诉你 local IP,这通常是 RFC-1918 中的 NAT 化地址网络。
  • 这也是我发现的。我想我会发布一个新问题。
【解决方案3】:

请检查这个 How to get IP address of the device from code? 获取 ipaddress 还需要检查 InetAddressUtils.isIPv4Address(sAddr);

【讨论】:

    猜你喜欢
    • 2014-10-21
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2023-04-08
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多