URLConnection
URL
代表一个网络地址,抽象类URLConnection
是表示应用程序和URL
之间的通信链接的所有类的超类。该类的实例可以用于从URL引用的资源中读取和写入。URLConnection
本身依赖Socket
类实现网络连接,是对Socket
更高级的网络连接抽象- 创建与URL的连接的步骤
- 通过在URL上调用openConnection方法创建连接对象。
- 设置参数和一般请求属性。
- 使用connect方法实现与远程对象的实际连接。
- 远程对象变得可用。可以访问头字段和远程对象的内容
HttpURLConnection
和JarURLConnection
是URLConnection
的两个实现子类
Networklnterface
-
java.net.NetworkInterface
类表示由名称组成的网络接口和分配给此接口的IP地址列表。该类提供访问网卡设备的相关信息,比如网卡名称、IP地址和子网掩码等。@Test public void testNetworkInterface() throws Exception { //返回该主机每一个网络接口对应的NetworkInterface实例 Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces(); if (networkInterfaces != null) { while (networkInterfaces.hasMoreElements()) { NetworkInterface networkInterface = networkInterfaces.nextElement(); System.out.println("设备在操作系统中显示的名称: " + networkInterface.getDisplayName()); System.out.println("网络设备在操作系统中的名称: " + networkInterface.getName()); System.out.println("网络接口是否已经开启并正常工作: " + networkInterface.isUp()); System.out.println("网络接口的最大传输单元(MTU): " + networkInterface.getMTU()); System.out.println("网络接口是是否是环回接口: " + networkInterface.isLoopback()); Enumeration<InetAddress> inetAddressesList = networkInterface.getInetAddresses(); System.out.print("网络接口的硬件地址(MAC地址): "); byte[] hardwareAddress = networkInterface.getHardwareAddress(); if (hardwareAddress != null && hardwareAddress.length > 0) { System.out.println(bytesToHexMac(hardwareAddress)); } else { System.out.println(); } while (inetAddressesList.hasMoreElements()) { InetAddress address = inetAddressesList.nextElement(); System.out.println("主机地址: " + address.getHostAddress()); } System.out.println("=============分隔============="); } } } public static String bytesToHexMac(byte[] bytes) { StringBuilder buf = new StringBuilder(bytes.length * 2); for (int i = 0; i < bytes.length; i++) { buf.append(String.format("%02x", new Integer(bytes[i] & 0xff))); if (i != bytes.length - 1) { buf.append(":"); } } return buf.toString(); }
-
输出结果
设备在操作系统中显示的名称: utun1 网络设备在操作系统中的名称: utun1 网络接口是否已经开启并正常工作: true 网络接口的最大传输单元(MTU): 1380 网络接口是是否是环回接口: false 网络接口的硬件地址(MAC地址): 主机地址: fe80:0:0:0:7986:26a3:cee8:8e41%utun1 =============分隔============= 设备在操作系统中显示的名称: utun0 网络设备在操作系统中的名称: utun0 网络接口是否已经开启并正常工作: true 网络接口的最大传输单元(MTU): 2000 网络接口是是否是环回接口: false 网络接口的硬件地址(MAC地址): 主机地址: fe80:0:0:0:54e8:b97a:274d:c3ab%utun0 =============分隔============= 设备在操作系统中显示的名称: awdl0 网络设备在操作系统中的名称: awdl0 网络接口是否已经开启并正常工作: true 网络接口的最大传输单元(MTU): 1484 网络接口是是否是环回接口: false 网络接口的硬件地址(MAC地址): e2:82:be:9b:e2:1f 主机地址: fe80:0:0:0:e082:beff:fe9b:e21f%awdl0 =============分隔============= 设备在操作系统中显示的名称: en0 网络设备在操作系统中的名称: en0 网络接口是否已经开启并正常工作: true 网络接口的最大传输单元(MTU): 1500 网络接口是是否是环回接口: false 网络接口的硬件地址(MAC地址): 34:36:3b:c6:06:6c 主机地址: 2010:0:0:0:81c8:7b1:e03c:e8eb 主机地址: 2010:0:0:0:425:7018:707d:bcd3 主机地址: fe80:0:0:0:1468:5b3e:77a4:3df9%en0 主机地址: 192.168.1.4 =============分隔============= 设备在操作系统中显示的名称: lo0 网络设备在操作系统中的名称: lo0 网络接口是否已经开启并正常工作: true 网络接口的最大传输单元(MTU): 16384 网络接口是是否是环回接口: true 网络接口的硬件地址(MAC地址): 主机地址: fe80:0:0:0:0:0:0:1%lo0 主机地址: 0:0:0:0:0:0:0:1 主机地址: 127.0.0.1 =============分隔=============
InetAddress
-
InetAddress
代表IP地址,它有两个子类Inet4Address
(IPv4)和Inet6Address
(IPv6),InetAddress
类没有公共的的构造方法,所以不能实例化,需要借助静态方法创建实例@Test public void testInetAddress() throws Exception { Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces(); if (networkInterfaces != null) { while (networkInterfaces.hasMoreElements()) { NetworkInterface networkInterface = networkInterfaces.nextElement(); Enumeration<InetAddress> inetAddressesList = networkInterface.getInetAddresses(); if (inetAddressesList != null) { while (inetAddressesList.hasMoreElements()) { InetAddress inetAddress = inetAddressesList.nextElement(); System.out.println("IP地址的完全限定域名:" + inetAddress.getCanonicalHostName()); System.out.println("文本显示中的IP地址字符串:" + inetAddress.getHostAddress()); System.out.println("IP地址的主机名:" + inetAddress.getHostName()); byte[] address = inetAddress.getAddress(); if (address != null && address.length > 0) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < address.length; i++) { sb.append(address[i]); if (i != address.length) { sb.append("."); } } System.out.println("原始IP地址:" + sb.toString()); } else { System.out.println("原始IP地址:"); } } } } System.out.println("=============分隔============="); } }
-
输出结果
IP地址的完全限定域名:fe80:0:0:0:7986:26a3:cee8:8e41%utun1 文本显示中的IP地址字符串:fe80:0:0:0:7986:26a3:cee8:8e41%utun1 IP地址的主机名:fe80:0:0:0:7986:26a3:cee8:8e41%utun1 原始IP地址:-2.-128.0.0.0.0.0.0.121.-122.38.-93.-50.-24.-114.65. =============分隔============= IP地址的完全限定域名:fe80:0:0:0:54e8:b97a:274d:c3ab%utun0 文本显示中的IP地址字符串:fe80:0:0:0:54e8:b97a:274d:c3ab%utun0 IP地址的主机名:fe80:0:0:0:54e8:b97a:274d:c3ab%utun0 原始IP地址:-2.-128.0.0.0.0.0.0.84.-24.-71.122.39.77.-61.-85. =============分隔============= IP地址的完全限定域名:fe80:0:0:0:e082:beff:fe9b:e21f%awdl0 文本显示中的IP地址字符串:fe80:0:0:0:e082:beff:fe9b:e21f%awdl0 IP地址的主机名:fe80:0:0:0:e082:beff:fe9b:e21f%awdl0 原始IP地址:-2.-128.0.0.0.0.0.0.-32.-126.-66.-1.-2.-101.-30.31. =============分隔============= IP地址的完全限定域名:2010:0:0:0:81c8:7b1:e03c:e8eb 文本显示中的IP地址字符串:2010:0:0:0:81c8:7b1:e03c:e8eb IP地址的主机名:2010:0:0:0:81c8:7b1:e03c:e8eb 原始IP地址:32.16.0.0.0.0.0.0.-127.-56.7.-79.-32.60.-24.-21. IP地址的完全限定域名:2010:0:0:0:425:7018:707d:bcd3 文本显示中的IP地址字符串:2010:0:0:0:425:7018:707d:bcd3 IP地址的主机名:2010:0:0:0:425:7018:707d:bcd3 原始IP地址:32.16.0.0.0.0.0.0.4.37.112.24.112.125.-68.-45. IP地址的完全限定域名:jannal-macbook-pro.local 文本显示中的IP地址字符串:fe80:0:0:0:1468:5b3e:77a4:3df9%en0 IP地址的主机名:jannal-macbook-pro.local 原始IP地址:-2.-128.0.0.0.0.0.0.20.104.91.62.119.-92.61.-7. IP地址的完全限定域名:jannal-mbp 文本显示中的IP地址字符串:192.168.1.4 IP地址的主机名:jannal-mbp 原始IP地址:-64.-88.1.4. =============分隔============= IP地址的完全限定域名:fe80:0:0:0:0:0:0:1%lo0 文本显示中的IP地址字符串:fe80:0:0:0:0:0:0:1%lo0 IP地址的主机名:fe80:0:0:0:0:0:0:1%lo0 原始IP地址:-2.-128.0.0.0.0.0.0.0.0.0.0.0.0.0.1. IP地址的完全限定域名:localhost 文本显示中的IP地址字符串:0:0:0:0:0:0:0:1 IP地址的主机名:localhost 原始IP地址:0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1. IP地址的完全限定域名:localhost 文本显示中的IP地址字符串:127.0.0.1 IP地址的主机名:localhost 原始IP地址:127.0.0.1. =============分隔=============
-
根据主机名称获取IP地址
@Test public void testInetAddress2() throws Exception { //根据主机名获取ip地址 InetAddress inetAddress = InetAddress.getByName("www.baidu.com"); //111.13.100.92 System.out.println(inetAddress.getHostAddress()); inetAddress = InetAddress.getByName("111.13.100.92"); //111.13.100.92 System.out.println(inetAddress.getHostName()); //根据主机名获取所有的ip地址 InetAddress[] inetAddresses = InetAddress.getAllByName("www.baidu.com"); Arrays.stream(inetAddresses).forEach(inetAddress1 -> { System.out.println(inetAddress1.getHostAddress()); }); }