本教程是为JDK 8编写的。本页面描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息,请参阅JDK发行说明。
NetworkInterface类没有公共构造函数。因此,你不能使用new操作符直接创建该类的新实例。相反,可以使用以下静态方法从系统中检索接口详细信息:getByInetAddress()、getByName()和getNetworkInterfaces()。前两个方法用于当你已知特定接口的IP地址或名称时。第三个方法getNetworkInterfaces()返回机器上的所有接口的完整列表。
网络接口可以按层次结构组织。 NetworkInterface类包括两个方法getParent()和getSubInterfaces(),这些方法与网络接口层次结构相关。 getParent()方法返回一个接口的父NetworkInterface。如果一个网络接口是子接口,则getParent()返回一个非空值。 getSubInterfaces()方法返回一个网络接口的所有子接口。
以下示例程序列出了计算机上所有网络接口和子接口(如果存在)的名称。
import java.io.*;
import java.net.*;
import java.util.*;
import static java.lang.System.out;
public class ListNIFs
{
public static void main(String args[]) throws SocketException {
Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface netIf : Collections.list(nets)) {
out.printf("显示名称:%s\n", netIf.getDisplayName());
out.printf("名称:%s\n", netIf.getName());
displaySubInterfaces(netIf);
out.printf("\n");
}
}
static void displaySubInterfaces(NetworkInterface netIf) throws SocketException {
Enumeration<NetworkInterface> subIfs = netIf.getSubInterfaces();
for (NetworkInterface subIf : Collections.list(subIfs)) {
out.printf("\t子接口显示名称:%s\n", subIf.getDisplayName());
out.printf("\t子接口名称:%s\n", subIf.getName());
}
}
}
以下是示例程序的输出示例:
显示名称:bge0
名称:bge0
子接口显示名称:bge0:3
子接口名称:bge0:3
子接口显示名称:bge0:2
子接口名称:bge0:2
子接口显示名称:bge0:1
子接口名称:bge0:1
显示名称:lo0
名称:lo0