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();

        }

    }
}

输出:

  1. public byte[] getHardwareAddress()方法的作用 :获得 网卡的硬件地址。

  2. public Enumeration<N etworklnterface> getSublnterfaces()方法的作用 : 取得子接口 。

  3. public int getMTU()方法的作用:返回 MTU大小。

  4. public Enurneration<InetAddress> getlnetAddresses()方法的作用: 获得绑定到此网络接 口的 InetAddress 列表,此方法返回泛型 Enurneration<lnetAddress>。

  5. static InetA ddress getLocalHost()方法的作用:返回 本 地 主 机的IP地址信息.

  6. static InetAddress getByName(String host)方法的作用 : 在给定主机名的情况下确定 主机 的IP地址。 参数host可以是计算机名、 IP地址, 也可以是域名。

  7. static InetAddress[] getAllByName(String host)方法的作用: 在给定主机名的情况下,根 据系统上配置的名称服务返回其 IP 地址所组成的数组 。

  8. static InetAddress getByAddress(byte[] addr)方法的作用 : 在给定原始 IP 地址的情况下, 返回 InetAddress对象。参数按网络宇节顺序:地址的高位字节位于 getAddress()[O]中。

  9. static InetAddress getByAddress(String host, byte[] addr)方法的作用 :根据提供的主机名 和 IP 地址创建 InetAddress,并不对 host 的有效性进行验证 。

  10. getCanonicalHostName()方法的作用是取得主机完全限定域名, 而getHostName()方法 是取得主机别名 。

  11. public boolean isPointToPoint()方法的作用:判断当前的网络设备是不是点对点设备 。

  12. 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 地址绑定到多个网络 接口, 则不确定返回哪个网络接口 。

猜你喜欢

转载自blog.csdn.net/zhanglong_4444/article/details/88994405
今日推荐