一、问题提出
在使用 Java 开发网络程序时,有时候我们需要知道本机在局域网中的 IP 地址。很常见的一种做法是调用本地命令(比如 Windows 上的 ipconfig 命令和 Linux 上的 ifconfig 命令),接着解析本地命令的输出,最后得到本机在局域网内的 IP 地址。很明显,这种做法不够方便,也不够 Java。于是引出了 Java 在 JDK1.4 的时候添加的一个类: NetworkInterface 。
二、创建方法
# 获取当前机器的所有接口
public static Enumeration<NetworkInterface> getNetworkInterfaces()
# 根据名字获取网络接口
public static NetworkInterface getByName(String name) throws SocketException()
# 根据顺序获取网络接口
public static NetworkInterface getByIndex(int index) throws SocketException
# 根据地址获取网络接口
public static NetworkInterface getByInetAddress(InetAddress addr) throws SocketException
三、常用方法
getName方法
这个方法用来得到一个网络接口的名称。这个名称就是使用getByName方法创建NetworkInterface对象时使用的网络接口名,如eth0、ppp0等。getName方法的定义如下:
public String getName()
getDisplayName方法
这个方法可以得到更容易理解的网络接口名,也可以将这个网络接口名称为网络接口别名。在一些操作系统中(如Unix),getDisplayName方法和getName方法的返回值相同,但在Windows中getDisplayName方法一般会返回一个更为友好的名字,如Realtek RTL8139 Family PCI Fast Ethernet NIC。getDisplayName方法的定义如下:
public String getDisplayName()
getInetAddresses方法
NetworkInterface类可以通过getInetAddresse方法以InetAddress对象的形式返回和网络接口绑定的所有IP地址。getInetAddresses方法的定义如下:
public Enumeration getInetAddresses()