查找Galaxy Tab 10.1应用程序的IP地址



我为HTC的愿望编写了一个应用程序,它获取了设备的IP地址并将其打印到屏幕上。当我将此应用程序安装到我的选项卡 10.1 时,IP 地址以奇怪的格式以字母和数字出现?

private String getIpAddress()
    {
        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().toString(); }
                }
            }
        }
        catch(SocketException ex)
        {
            Log.e(TAG , ex.toString());
        }
        return null;
    }

选项卡 10.1 有什么不同?

(返回的 IP - fe80::be47:60ff:feff:21e2)

需要是一个 IP 地址,因为这是我传递给 PC 上的终端以连接到我的应用程序的地址。

>您的Galaxy Tab 10.1接收IPv6地址,在本例中为fe80::be47:60ff:feff:21e2。这可能是由HTC Desire和Galaxy Tab关于IPv6的不同偏好或功能引起的。

这并没有错,当IPv4地址空间用完时,越来越多的设备将(必须)使用IPv6地址。

正如Nesim在对该问题的评论中指出的那样,以fe80:开头的IPv6地址是链路本地地址,即设备在没有连接到任何分发地址的网络时自行分配的地址范围,例如通过DHCP。

因此,您的Galaxy Tab似乎没有连接到任何wifi网络,或者没有通过DHCP接收任何地址。

问题中的代码片段返回它找到的第一个地址,并且不会过滤掉链接本地地址(这些地址对于从外部连接没有用)。以下代码为您提供了既不是环回也不是链接本地的所有地址。你如何在其中许多之间进行选择取决于你 - 老实说我不知道:

private static List<InetAddress> getIpAddress() {
  try {
    List<InetAddress> result = new ArrayList<InetAddress>();
    Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
    while (interfaces.hasMoreElements()) {
      NetworkInterface intf = interfaces.nextElement();
      Enumeration<InetAddress> addresses = intf.getInetAddresses();
      while (addresses.hasMoreElements()) {
        InetAddress address = addresses.nextElement();
        if (!address.isLoopbackAddress() && !address.isLinkLocalAddress()) {
          result.add(address);
        }
      }
    }
    return result;
  } catch (SocketException ex) {
    Log.e(TAG, "Failed to list network interfaces.", ex);
    return null;
  }
}

为了进行比较,我的Windows系统列出了23个网络接口(其中大多数是虚拟的),总共有10个地址,其中2个是环回地址(本地主机),4个链路本地地址 - 留下上述代码将返回的4个地址 - 选择第一个似乎过于乐观。

相关内容

  • 没有找到相关文章

最新更新