NIO与Socket笔记 :NetworkInterface
NetworkInterface类表示一个由名称和分配给此接口的 IP地址列表组成的网络接口,也 就是 Networklnterface类包含网络接口名称与 IP地址列表。 该类提供访问网卡设备的相关 信息,如可以获取网卡名称、 IP 地址和子网掩码等 。
Socket 不是协议,是一种实现计算机之间通信的技术,而 HTTP 才是协议 。
IP 地址就是标识加入到网络中设 备 的地址,通过 IP 地址就可以在网络中找到指定的 设备。
其 实 localhost 只是一个域名,只有把域名 localhost解析为 127.0.0.1 ,才能进行数据传输与通 信,
这个解析的过程是由 hosts 文件完成的,
代码示例:
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
public class test01 {
public static void main(String[] args) throws SocketException {
Enumeration<NetworkInterface> networkinterface = NetworkInterface.getNetworkInterfaces ();
while (networkinterface.hasMoreElements()) {
NetworkInterface eachNetworkinterface = networkinterface.nextElement();
System.out.println("getName 获得网络设备名称 =" + eachNetworkinterface.getName());
System.out.println("getDisplayName 获得网络设备显示名称=" + eachNetworkinterface.getDisplayName());
System.out.println("getIndex获得网络接口的索引= " + eachNetworkinterface.getIndex());
System.out.println("isUp是否已经开启并运行=" + eachNetworkinterface.isUp());
System.out.println("isLoopback是否为回调接口=" + eachNetworkinterface.isLoopback());
System.out.println();
System.out.println();
}
}
}
输出:
结论:
1 )网络设备的索引有可能不连续 。
2 ) isLoopback()方法针对 lo设备返回值是 true,针对其他设备返回值为 false, 因为系统中只有1个回调/回环地址。
3).而 isUp()方法的返回值都是 true,那什么时候为 false呢? 返回值为 true是因为网络设备正在工作.
3).getDisplayName()方法的返回值是有据可查的。
获取 MTU 大小
public int getMTU()方法的作用:返回 MTU大小。
在网络 传输中是以数据包为基本传输单位,可以使用 MTU(MaximumTransmission Unit,最大传输单元)
来规定网络传输最大数据包的大小,单位为字节。
以太网的网卡 MTU大多数默认值是 1500字节,在 1Pv6协议中, MTU 的范围是1280~65535。
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
public class test02 {
public static void main(String[] args) throws SocketException {
Enumeration<NetworkInterface> networkinterface = NetworkInterface.getNetworkInterfaces ();
while (networkinterface.hasMoreElements()) {
NetworkInterface eachNetworkinterface = networkinterface.nextElement();
System.out.println("getName 获得网络设备名称 =" + eachNetworkinterface.getName());
System.out.println("getDisplayName 获得网络设备显示名称=" + eachNetworkinterface.getDisplayName());
System.out.println("getMTU获取最大传输单元 = " + eachNetworkinterface.getMTU());
System.out.println();
System.out.println();
}
}
}
输出:
-
public byte[] getHardwareAddress()方法的作用 :获得 网卡的硬件地址。
-
public Enumeration<N etworklnterface> getSublnterfaces()方法的作用 : 取得子接口 。
-
public int getMTU()方法的作用:返回 MTU大小。
-
public Enurneration<InetAddress> getlnetAddresses()方法的作用: 获得绑定到此网络接 口的 InetAddress 列表,此方法返回泛型 Enurneration<lnetAddress>。
-
static InetA ddress getLocalHost()方法的作用:返回 本 地 主 机的IP地址信息.
-
static InetAddress getByName(String host)方法的作用 : 在给定主机名的情况下确定 主机 的IP地址。 参数host可以是计算机名、 IP地址, 也可以是域名。
-
static InetAddress[] getAllByName(String host)方法的作用: 在给定主机名的情况下,根 据系统上配置的名称服务返回其 IP 地址所组成的数组 。
-
static InetAddress getByAddress(byte[] addr)方法的作用 : 在给定原始 IP 地址的情况下, 返回 InetAddress对象。参数按网络宇节顺序:地址的高位字节位于 getAddress()[O]中。
-
static InetAddress getByAddress(String host, byte[] addr)方法的作用 :根据提供的主机名 和 IP 地址创建 InetAddress,并不对 host 的有效性进行验证 。
-
getCanonicalHostName()方法的作用是取得主机完全限定域名, 而getHostName()方法 是取得主机别名 。
-
public boolean isPointToPoint()方法的作用:判断当前的网络设备是不是点对点设备 。
-
public boolean supportsMulticast()方法的作用:判断当前的网络设备是否支持多播。
-
Networklnterface 类的静态方法
Networklnterface类除了有 getNetworklnterfaces()方法外,还有 3个静态方法,分别介 绍如下。
1 ) public static Networklnterface getBylndex(int index)方法的作用:根据指定的索引取得 Networklnterface对象。
2 ) public static Networklnterface getByName(String name)方法的作用:根据指定的 Network Interface 的 name名称来获取 Networklnterface对象。
3 ) public static Networklnterface getBylnetAddress(lnetAddress addr)方法的作用:根据 指定的 InetAddress 对 象获得 Networklnterface。 如果指定的 IP 地址绑定到多个网络 接口, 则不确定返回哪个网络接口 。