查找Galaxy Tab 10.1的IP地址以供应用

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

private String getIpAddress() { try { for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration 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的不同偏好或function造成的。

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

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

所以看起来你的Galaxy Tab没有连接到任何wifi网络或者没有通过DHCP接收任何地址。

问题中的代码片段返回它找到的第一个地址,并且不会过滤掉链接本地地址(这对于从外部连接无用)。 以下代码为您提供既不是环回也不是链接本地的所有地址。 你如何选择他们中的许多人取决于你 – 我真的不知道:

 private static List getIpAddress() { try { List result = new ArrayList(); Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); while (interfaces.hasMoreElements()) { NetworkInterface intf = interfaces.nextElement(); Enumeration 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个是环回地址(localhost),4个链接本地地址 – 留下4个地址,上面的代码将回归 – 挑选第一个似乎过于乐观。