Java获取运行服务器的IP地址

引言

在开发Java应用程序中,有时候需要获取当前运行服务器的IP地址。本篇文章将指导初学者如何实现这个功能。首先,我们将介绍整个过程的流程,然后逐步解释每一步需要做什么,包括所需的代码和代码注释。

流程概述

我们将使用以下步骤实现获取运行服务器的IP地址:

  1. 获取本地主机信息
  2. 获取网络接口
  3. 遍历网络接口,查找支持IPv4的接口
  4. 获取IPv4地址

下图是整个流程的状态图:

stateDiagram
    [*] --> 获取本地主机信息
    获取本地主机信息 --> 获取网络接口
    获取网络接口 --> 遍历网络接口
    遍历网络接口 --> 获取IPv4地址
    获取IPv4地址 --> [*]

获取本地主机信息

我们首先需要获取本地主机信息。以下是需要使用的代码,以及其对应的注释:

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

public class Main {
    public static void main(String[] args) {
        try {
            // 获取本地主机信息
            InetAddress localhost = InetAddress.getLocalHost();
            
            // 打印本地主机名称和IP地址
            System.out.println("Host Name: " + localhost.getHostName());
            System.out.println("IP Address: " + localhost.getHostAddress());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

代码解释:

  • 首先,我们导入了java.net.InetAddressjava.net.UnknownHostException类。
  • main方法中,我们使用getLocalHost方法获取本地主机信息,并将其赋值给localhost变量。
  • 最后,我们使用getHostNamegetHostAddress方法分别获取主机名称和IP地址,并打印出来。

获取网络接口

接下来,我们需要获取网络接口。以下是需要使用的代码,以及其对应的注释:

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

public class Main {
    public static void main(String[] args) {
        try {
            // 获取本地主机信息
            InetAddress localhost = InetAddress.getLocalHost();
            
            // 获取网络接口
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            
            // 遍历网络接口
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = networkInterfaces.nextElement();
                
                // 打印网络接口名称
                System.out.println("Interface Name: " + networkInterface.getName());
            }
        } catch (UnknownHostException | SocketException e) {
            e.printStackTrace();
        }
    }
}

代码解释:

  • 首先,我们导入了java.net.NetworkInterfacejava.net.SocketException类,以及java.util.Enumeration接口。
  • main方法中,我们使用getLocalHost方法获取本地主机信息,并将其赋值给localhost变量。
  • 然后,我们使用getNetworkInterfaces方法获取所有网络接口,并将其赋值给networkInterfaces变量。
  • 接下来,我们使用hasMoreElements方法检查是否还有下一个网络接口。
  • 在循环中,我们使用nextElement方法获取下一个网络接口,并将其赋值给networkInterface变量。
  • 最后,我们使用getName方法获取网络接口的名称,并打印出来。

遍历网络接口,查找支持IPv4的接口

现在,我们需要遍历网络接口并查找支持IPv4的接口。以下是需要使用的代码,以及其对应的注释:

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

public class Main {
    public static void main(String[] args) {
        try {
            // 获取本地主机信息
            InetAddress localhost = InetAddress.getLocalHost();
            
            // 获取网络接口
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            
            // 遍历网络接口,查找支持IPv4的接口
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = networkInterfaces.nextElement();
                
                // 只处理支持IPv4的接口
                if (networkInterface.supportsMulticast() && !networkInterface.isLoopback()) {
                    // 打印网络接口名称
                    System.out.println