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地址
获取第一个