本教程是为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