Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA获取IP地址_Java_Android_Ip_Inet - Fatal编程技术网

JAVA获取IP地址

JAVA获取IP地址,java,android,ip,inet,Java,Android,Ip,Inet,我正在开发一款android应用程序,需要了解设备ip 我尝试过Inet4Address.getLocalHost().getHostAddress(),但它给出了127.0.0.1 因此,我正在建立一个与服务器的HTTP连接,该服务器将ip发送回 但是,当设备和请求的服务器之间存在网关时,此过程会产生问题。在这种情况下,我不获取网络的设备ip,而是获取网关ip 请帮忙 谢谢。首先,您可能有几个网络接口,其中一个是lo。 其次,您可能同时设置了ipv4和ipv6,即每个网络接口有多个ip地址。

我正在开发一款android应用程序,需要了解设备ip

我尝试过
Inet4Address.getLocalHost().getHostAddress()
,但它给出了
127.0.0.1

因此,我正在建立一个与服务器的HTTP连接,该服务器将ip发送回

但是,当设备和请求的服务器之间存在网关时,此过程会产生问题。在这种情况下,我不获取网络的设备ip,而是获取网关ip

请帮忙


谢谢。

首先,您可能有几个网络接口,其中一个是lo。 其次,您可能同时设置了ipv4和ipv6,即每个网络接口有多个ip地址。 因此,您需要定义要使用的IP地址和网络接口,然后创建一个筛选器。如果只取第一个地址,则将得到与Inet4Address.getLocalHost().getHostAddress()之后相同的结果。

假设您要获取找到的第一个非环回接口的ipv4(ipv6)地址。然后,以下代码给出了ip:

static InetAddress ip() throws SocketException {
    Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
    NetworkInterface ni;
    while (nis.hasMoreElements()) {
        ni = nis.nextElement();
        if (!ni.isLoopback()/*not loopback*/ && ni.isUp()/*it works now*/) {
            for (InterfaceAddress ia : ni.getInterfaceAddresses()) {
                //filter for ipv4/ipv6
                if (ia.getAddress().getAddress().length == 4) {
                    //4 for ipv4, 16 for ipv6
                    return ia.getAddress();
                }
            }
        }
    }
    return null;
}

public static void main(String[] args) throws SocketException {
    System.out.println(ip());
}
静态InetAddress ip()引发SocketException{
枚举nis=NetworkInterface.getNetworkInterfaces();
网络接口;
而(nis.hasMoreElements()){
ni=nis.nextElement();
如果(!ni.isLoopback()/*不是环回*/&&ni.isUp()/*它现在可以工作了*/){
对于(InterfaceAddress ia:ni.getInterfaceAddresses()){
//ipv4/ipv6的筛选器
如果(ia.getAddress().getAddress().length==4){
//ipv4为4,ipv6为16
返回ia.getAddress();
}
}
}
}
返回null;
}
公共静态void main(字符串[]args)抛出SocketException{
System.out.println(ip());
}
请参见