【问题标题】:Android Tablet IP Address安卓平板IP地址
【发布时间】:2011-12-24 07:01:45
【问题描述】:

这里我遇到了关于获取 Android 平板电脑 IP 地址的问题。

我正在以通用方式将以下代码用于平板电脑 IP 地址。

  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().toString();
                }
            }
        }

inetAddress.getHostAddress() 方法将 IP 地址返回为 fe80::9a4b:4aff:fe00:a6e1 ,这是与 122 不同的格式。 xx.xxx.xxx 格式。

当我使用 Wifimanager 类获取平板电脑 IP 地址时,它仅以这种格式返回 122.xx.xxx.xxx

但是使用通用方式,我不知道为什么它给出了错误的格式。

谁能帮我解决这个问题...

提前致谢。

【问题讨论】:

  • 我对 android API 了解不多,但是 AFAIK,fe80::9a4b:4aff:fe00:a6e1 太大而不能成为 IP 地址。看起来你使用了错误的方法。

标签: android ip tablet


【解决方案1】:

fe80::9a4b:4aff:fe00:a6e1 一点都没错。它只是新式的,IPv6。

新应用程序始终应设计为能够以两种格式工作。

【讨论】:

    【解决方案2】:

    这是一个 IPv6 地址。先看看wikipedia article。可以将 IPv6 地址转换为 IPv4 地址(即 xxx.xxx.xxx.xxx),但不能保证。

    【讨论】:

    • 感谢您的回复。我们尝试将 IP6 转换为 IP4 ,无论转换后的 IP 与 IP 地址不匹配,都与 WifiManager 类返回值不匹配。
    【解决方案3】:

    /* 查看可用的网络接口并选择第一个“合适的”IPv4 地址。 * 由于模拟器默认使用 10.0.2.15,只有在没有更好的可用时才使用它。 */

    public String getMyIp() {
            Set<String> eligible = eligibleIpAddresses();
    
    /* For the emulator, prefer an IP address other than 10.0.2.15 (default emulator address)
                 * but use it if it is the only one. */
            if (eligible.size() > 1) {
                eligible.remove("10.0.2.15");
                return eligible.iterator().next();
            } else if (eligible.size() == 1) {
                return eligible.iterator().next();
            } else {
                Log.w("Using local IP address, no external objects will be discovered","---");
                return "127.0.0.1";
            }
        }
    
        public static Set<String> eligibleIpAddresses() {
            Set<String> eligible = new HashSet<String>();
            try {
                Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();
                while (netInterfaces.hasMoreElements()) {
                    NetworkInterface ni = netInterfaces.nextElement();
                    Enumeration<InetAddress> address = ni.getInetAddresses();
                    while (address.hasMoreElements()) {
                        InetAddress addr = address.nextElement();
                        if (!addr.isLoopbackAddress() && !(addr.getHostAddress().indexOf(":") > -1)) {
                            eligible.add(addr.getHostAddress());
                        }
                    }
                }
            } catch (Exception e) {
            }
            return eligible;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-07
      • 2015-03-23
      • 2021-03-13
      • 2010-12-15
      • 2014-08-14
      • 1970-01-01
      • 2011-06-12
      • 2017-06-24
      相关资源
      最近更新 更多