获取java中eth0接口的ip地址只返回IPv6地址,而不返回IPv4地址

获取java中eth0接口的ip地址只返回IPv6地址,而不返回IPv4地址,java,ipv4,inetaddress,network-interface,Java,Ipv4,Inetaddress,Network Interface,我编写了以下代码以获取我在计算机上使用的eth0接口的IPv4地址。但是,该代码只找到fe80:x:x:x:xxx:xxxx:xxxx:xxxx,由于我正在查找IPv4地址,因此未返回该地址 这是代码 interfaceName = "eth0"; NetworkInterface networkInterface = NetworkInterface.getByName(interfaceName); Enumeration<InetAddress> ine

我编写了以下代码以获取我在计算机上使用的eth0接口的IPv4地址。但是,该代码只找到
fe80:x:x:x:xxx:xxxx:xxxx:xxxx
,由于我正在查找IPv4地址,因此未返回该地址

这是代码

    interfaceName = "eth0";
    NetworkInterface networkInterface = NetworkInterface.getByName(interfaceName);
    Enumeration<InetAddress> inetAddress = networkInterface.getInetAddresses();
    InetAddress currentAddress;
    currentAddress = inetAddress.nextElement();
    while(inetAddress.hasMoreElements())
    {
        System.out.println(currentAddress);
        if(currentAddress instanceof Inet4Address && !currentAddress.isLoopbackAddress())
        {
            ip = currentAddress.toString();
            break;
        }
        currentAddress = inetAddress.nextElement();
    }
interfaceName=“eth0”;
NetworkInterface NetworkInterface=NetworkInterface.getByName(interfaceName);
枚举inetAddress=networkInterface.getInetAddresses();
InetAddress当前地址;
currentAddress=inetAddress.nextElement();
while(inetAddress.hasMoreElements())
{
系统输出打印项次(当前地址);
if(Inet4Address&!currentAddress.isLoopbackAddress()的currentAddress实例)
{
ip=currentAddress.toString();
打破
}
currentAddress=inetAddress.nextElement();
}

它搞乱了它获取下一个元素的逻辑。在运行比较时,我在
之前获取了
inetAddress
下一个元素。这样就没有更多的元素了

下面的代码修复了逻辑

    interfaceName = "eth0";
    NetworkInterface networkInterface = NetworkInterface.getByName(interfaceName);
    Enumeration<InetAddress> inetAddress = networkInterface.getInetAddresses();
    InetAddress currentAddress;
    currentAddress = inetAddress.nextElement();
    while(inetAddress.hasMoreElements())
    {
        currentAddress = inetAddress.nextElement();
        if(currentAddress instanceof Inet4Address && !currentAddress.isLoopbackAddress())
        {
            ip = currentAddress.toString();
            break;
        }
    }
interfaceName=“eth0”;
NetworkInterface NetworkInterface=NetworkInterface.getByName(interfaceName);
枚举inetAddress=networkInterface.getInetAddresses();
InetAddress当前地址;
currentAddress=inetAddress.nextElement();
while(inetAddress.hasMoreElements())
{
currentAddress=inetAddress.nextElement();
if(Inet4Address&!currentAddress.isLoopbackAddress()的currentAddress实例)
{
ip=currentAddress.toString();
打破
}
}

在我看来,为了语义正确,您应该删除对
intetAddress.nextElement()
的第一个调用,即while循环之前的调用,因为您总是在当前编写第一个元素时将其丢弃!currentAddress.toString()返回“/192.168.1.13”。因此,也许可以改用这个:currentAddress.getHostAddress(),它返回“192.168.1.13”