Java获取内网IP和外网IP的实现方法

1. 流程概述

要实现获取Java程序中的内网IP和外网IP,可以按照以下步骤进行操作:

步骤 描述
1. 获取本地主机名
2. 根据主机名获取IP地址
3. 获取外网IP地址

下面我将详细介绍每个步骤需要做什么,以及代码示例。

2. 获取本地主机名

在Java中,可以使用InetAddress类的getLocalHost方法来获取本地主机名。以下是代码示例:

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

public class LocalHostNameExample {
    public static void main(String[] args) {
        try {
            InetAddress localHost = InetAddress.getLocalHost();
            String hostName = localHost.getHostName();
            System.out.println("本地主机名:" + hostName);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们使用getLocalHost方法获取本地主机的InetAddress对象,然后调用getHostName方法获取主机名。

3. 根据主机名获取IP地址

根据主机名获取IP地址有两种方法:一种是获取所有的IP地址,另一种是获取第一个非回环地址。以下是代码示例:

3.1 获取所有的IP地址

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

public class AllIpAddressesExample {
    public static void main(String[] args) {
        try {
            InetAddress[] allAddresses = InetAddress.getAllByName("localhost");
            for (InetAddress address : allAddresses) {
                System.out.println("IP地址:" + address.getHostAddress());
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们使用getAllByName方法获取指定主机名的所有IP地址,并使用getHostAddress方法获取IP地址。

3.2 获取第一个非回环地址

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

public class NonLoopbackAddressExample {
    public static void main(String[] args) {
        try {
            InetAddress[] allAddresses = InetAddress.getAllByName("localhost");
            for (InetAddress address : allAddresses) {
                if (!address.isLoopbackAddress()) {
                    System.out.println("IP地址:" + address.getHostAddress());
                    break;
                }
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们使用isLoopbackAddress方法判断是否为回环地址,如果不是回环地址,则输出IP地址。

4. 获取外网IP地址

获取外网IP地址可以通过访问一个特定的网址来获取,例如

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

public class ExternalIpAddressExample {
    public static void main(String[] args) {
        try {
            URL url = new URL("
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            String ipAddress = reader.readLine().trim();
            System.out.println("外网IP地址:" + ipAddress);
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,我们使用URL类和BufferedReader类来读取

5. 类图

下面是本文所提到的类的简单示意图:

classDiagram
    class InetAddress {
        +getLocalHost(): InetAddress
        +getAllByName(host: String): InetAddress[]
        +getHostAddress(): String
        +getHostName(): String
        +isLoopbackAddress(): boolean
    }
    class URL {
        +URL(url: String)
        +openStream(): InputStream
    }
    class InputStreamReader {
        +InputStreamReader(stream: InputStream)
    }
    class BufferedReader {
        +BufferedReader(reader: Reader)
        +readLine(): String
        +close()
    }

以上类图展示了使用到的关键类和方法。

6. 状态图

下面是内网IP和外网IP获取的状态图示例:

stateDiagram
    [*] --> 获取本地主机名
    获取本地主机名 --> 获取所有IP地址
    获取本地主机名 --> 获取第一个非回环地址
    获取所有IP地址 --> 外网IP地址
    获取第一个