本文介绍了如何使用Java编程语言编写代码来获取计算机系统的本地IP地址和主机名称,适用于需要进行网络编程或系统信息查询的开发者。
在Java编程中,获取本地IP地址和主机名是一个常见的需求。本段落将详细介绍基于Java实现获取本地IP地址和主机名的两种方式,并对每种方式进行详细的解释和示例代码。
### 方式一:通过java.net.InetAddress类获取
使用`java.net.InetAddress`类可以轻松地获取到本地机器的IP地址及主机名信息,如下所示:
```java
public void test1() {
try {
InetAddress addr = InetAddress.getLocalHost();
System.out.println(IP地址: + addr.getHostAddress() + ,主机名: + addr.getHostName());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
```
输出结果类似于:
```
IP地址:192.168.153.1,主机名:DESKTOP-338UP3E
```
### 方式二:利用java.net.NetworkInterface获取
通过`java.net.NetworkInterface`类可以更全面地获得网络接口的详细信息,包括所有可用IP地址和对应的主机名称。示例代码如下:
```java
public void test2() {
try {
Enumeration faces = NetworkInterface.getNetworkInterfaces();
while (faces.hasMoreElements()) {
NetworkInterface face = faces.nextElement();
if (face.isLoopback() || face.isVirtual() || !face.isUp()) continue;
System.out.print(网络接口名: + face.getDisplayName() + ,地址:);
Enumeration address = face.getInetAddresses();
while(address.hasMoreElements()){
InetAddress addr = address.nextElement();
if(!addr.isLoopbackAddress() && addr.isSiteLocalAddress() && !addr.isAnyLocalAddress()) {
System.out.print(addr.getHostAddress()+ );
}
}
System.out.println();
}
} catch (SocketException e) {
e.printStackTrace();
}
}
```
输出结果可能如下:
```
网络接口名:VMware Virtual Ethernet Adapter for VMnet8,地址:192.168.153.1
网络接口名:TAP-Windows Adapter V9,地址:10.8.0.30
网络接口名:VMware Virtual Ethernet Adapter for VMnet1,地址:192.168.46.1
网络接口名:Intel(R) Dual Band Wireless-AC 8265,地址:172.16.78.27
```
### 工具类
为了简化获取本地IP和主机名称的过程,可以将上述两种方法封装进一个工具类中:
```java
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Enumeration;
public class LocalHostUtil {
public static String getHostName() throws UnknownHostException {
return InetAddress.getByName(localhost).getHostName();
}
public static ArrayList getLocalIPAddresses() throws SocketException {
ArrayList addresses = new ArrayList<>();
Enumeration faces = NetworkInterface.getNetworkInterfaces();
while (faces.hasMoreElements()) {
NetworkInterface face = faces.nextElement();
if (!face.isUp()) continue;
Enumeration address = face.getInetAddresses();
while(address.hasMoreElements()){
InetAddress addr = address.nextElement();
if(addr.isSiteLocalAddress() && !addr.isLoopbackAddress() && !addr.isAnyLocalAddress())
addresses.add(addr.getHostAddress());
}
}
return addresses;
}
}
```
通过使用该工具类,我们可以方便地获取本地IP地址和主机名。