Java获取多个本机IP

引言

在网络通信中,IP地址是唯一标识一个设备的地址。对于一个设备而言,可能会有多个IP地址与之关联。有时候我们需要获取本机的多个IP地址,以便进行网络通信或者其他操作。本文将介绍如何使用Java语言来获取本机的多个IP地址。

获取本机IP的方法

Java提供了多种方式来获取本机的IP地址,下面将介绍其中的两种方法:使用InetAddress类和使用NetworkInterface类。

使用InetAddress类

InetAddress类是Java提供的用于表示IP地址的类。我们可以使用它的getLocalHost()方法来获取本机的IP地址。

import java.net.InetAddress;
import java.net.UnknownHostException;

public class GetLocalIpAddress {

    public static void main(String[] args) {
        try {
            InetAddress localhost = InetAddress.getLocalHost();
            System.out.println("Localhost IP: " + localhost.getHostAddress());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

以上代码中,我们使用getLocalHost()方法来获取本机的IP地址。然后通过调用getHostAddress()方法获取IP地址的字符串表示。

使用NetworkInterface类

NetworkInterface类是Java提供的用于访问网络接口的类。我们可以使用它的getNetworkInterfaces()方法来获取本机的网络接口列表,然后再通过遍历接口列表获取每个接口的IP地址。

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

public class GetLocalIpAddresses {

    public static void main(String[] args) {
        try {
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = networkInterfaces.nextElement();
                Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
                while (inetAddresses.hasMoreElements()) {
                    InetAddress inetAddress = inetAddresses.nextElement();
                    if (!inetAddress.isLoopbackAddress() && inetAddress.isSiteLocalAddress()) {
                        System.out.println("IP Address: " + inetAddress.getHostAddress());
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

以上代码中,我们使用getNetworkInterfaces()方法获取本机的网络接口列表,然后通过遍历接口列表来获取每个接口的IP地址。我们通过判断IP地址是否为回环地址和站点本地地址来排除非本机的IP地址。

示例和输出

下面是一个完整的示例代码,包含了使用InetAddress类和NetworkInterface类来获取本机的多个IP地址。

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

public class GetLocalIpAddresses {

    public static void main(String[] args) {
        try {
            // 使用InetAddress类获取本机IP地址
            InetAddress localhost = InetAddress.getLocalHost();
            System.out.println("Localhost IP: " + localhost.getHostAddress());

            // 使用NetworkInterface类获取本机IP地址
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = networkInterfaces.nextElement();
                Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
                while (inetAddresses.hasMoreElements()) {
                    InetAddress inetAddress = inetAddresses.nextElement();
                    if (!inetAddress.isLoopbackAddress() && inetAddress.isSiteLocalAddress()) {
                        System.out.println("IP Address: " + inetAddress.getHostAddress());
                    }
                }
            }
        } catch (SocketException | UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

运行以上代码,输出结果如下:

Localhost IP: 192.168.1.100
IP Address: 192.168.1.100
IP Address: 192.168.1.101

以上输出结果中,第一行是使用InetAddress类获取的本机IP地址,第二行和第三行是使用NetworkInterface类获取的本机IP地址。

结语

本文介绍了使用Java语言获取本机的多个IP地址的方法。我们使用了InetAddress类和NetworkInterface类来实现这个功能。通过这些方法,我们可以方便地获取本机的多个IP地址,以便进行网络通信或者其他操作。

希望本文能对你理解和使用Java获取本机IP地址有所帮助。如果有任何问题,请随时向我提问。