在Android上获取IP地址时使用不同的值

在Android上获取IP地址时使用不同的值,android,mobile,network-programming,ip,Android,Mobile,Network Programming,Ip,当我连接到移动网络时,我尝试在Android上获取外部IP地址值 我使用以下代码: public static String ipAddress() { String ipAddress = "N/A"; try { for (Enumeration<NetworkInterface> en = NetworkInterface .getNetworkInterfaces(); en.hasMoreElements();

当我连接到移动网络时,我尝试在Android上获取外部IP地址值

我使用以下代码:

public static String ipAddress() {
    String ipAddress = "N/A";
    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()) {
                    ipAddress = inetAddress.getHostAddress().toString();
                }
            }
        }

    } catch (SocketException ex) {
    }

    return ipAddress;
}
公共静态字符串ipAddress(){
字符串ipAddress=“N/A”;
试一试{
对于(枚举en=网络接口
.getNetworkInterfaces();en.hasMoreElements();){
NetworkInterface intf=en.nextElement();
对于(枚举枚举enumIpAddr=intf
.getInetAddresses();EnumipAddress.hasMoreElements();){
InetAddress InetAddress=enumIpAddr.nextElement();
如果(!inetAddress.isLoopbackAddress()){
ipAddress=inetAddress.getHostAddress().toString();
}
}
}
}捕获(SocketException例外){
}
返回IP地址;
}
它返回一个值。当然,我在应用程序中也使用了类似的服务:返回外部IP地址

我的问题是服务返回的值与方法ipAddress()不同

那么,你能帮我理解ipAddress()方法的问题是什么吗?从ipAddress()获取的值是什么意思

谢谢你的帮助


Sylvain

您使用的是蜂窝网络吗

你说你看到了一个10.x.x.x的IP地址。10.x.x.x类似于192.168.x.x——它是一个专用网络内部地址,而不是一个具有全局意义的地址。你在某种NAT设置中

在蜂窝数据方面,您基本上总是支持由蜂窝运营商自己运行的巨大NAT系统。由于NAT系统,普通互联网站点和机器通常无法打开与移动设备的连接。手机运营商当然不会为您设置端口转发

如果您使用的是wifi网络,这就意味着无论是谁建立了专用内部网络,都会决定使用10.x.x.x IP地址,而不是192.168.x.x——这很常见


在这两种情况下,都意味着从代码中可见的IP地址不能被外部机器或设备使用。没有人(至少本地网络之外的人)可以使用这些地址启动与设备的连接。

您得到了什么值?我打赌您可以在本地获得localhost地址,但web服务会从网络提供商处为您提供手机地址。ipAddress()方法返回类似10.205.250.163的值。Localhost地址更像192.168.xx.xx否?Localhost几乎总是127.0.0.1,但可以是127.x.x.x的任何形式。此外,每次通过蜂窝运营商连接到internet时,每次都会分配不同的IP。