网络
网络模块是Hutool的核心模块之一,提供了丰富的网络相关功能,涵盖了IP地址处理、网络工具、URL处理、SSL等多个方面。
# 模块概述
网络模块主要包括以下功能:
- IP地址处理:IPv4、IPv6地址的解析、转换、验证等
- 网络工具:端口检测、网络连接、本地IP获取等
- MAC地址处理:MAC地址的获取、格式化等
- URL处理:URL的解析、构建、编码等
- SSL支持:SSL连接的创建和管理
- 代理支持:代理服务器的配置和使用
# JDK网络模块对比
# JDK网络模块的不足
- 功能分散:JDK的网络功能分散在多个包中,如
java.net、java.io、javax.net等,使用不够集中 - API复杂:某些操作API设计较为复杂,需要多次调用或转换
- 缺少常用功能:缺少IP地址验证、端口检测、MAC地址获取等常用功能
- 异常处理复杂:网络操作的异常处理较为复杂,需要编写大量的try-catch代码
- 缺少便捷方法:缺少一些常用的便捷方法,如获取本地IP、检测端口是否可用等
# Hutool网络模块的优势
- 功能集中:将所有网络相关功能集中在几个核心工具类中,使用方便
- API简洁:提供简洁易用的API,减少代码量
- 功能丰富:提供了JDK没有的多种功能,如IP地址验证、端口检测、MAC地址获取等
- 异常处理简化:简化了网络操作的异常处理,提供了更友好的异常信息
- 便捷方法丰富:提供了大量便捷方法,如获取本地IP、检测端口是否可用等
- 类型安全:提供了类型安全的方法,避免类型转换错误
# 核心类结构
| 类名 | 主要功能 |
|---|---|
| NetUtil | 网络工具类,提供端口检测、网络连接、本地IP获取等功能 |
| Ipv4Util | IPv4地址工具类,提供IPv4地址的解析、转换、验证等功能 |
| Ipv6Util | IPv6地址工具类,提供IPv6地址的解析、转换、验证等功能 |
| Ipv4Pool | IPv4地址池,用于管理IPv4地址 |
| MacAddressUtil | MAC地址工具类,提供MAC地址的获取、格式化等功能 |
| LocalPortGenerator | 本地端口生成器,用于生成可用的本地端口 |
| ProxySocketFactory | 代理Socket工厂,用于创建代理Socket连接 |
| UserPassAuthenticator | 用户密码认证器,用于代理认证 |
# 模块使用场景
- 网络诊断:检测端口是否可用、网络是否连通等
- IP地址管理:IP地址的解析、转换、验证等
- 网络连接:创建TCP/UDP连接、代理连接等
- URL处理:URL的解析、构建、编码等
- SSL通信:创建和管理SSL连接
- MAC地址获取:获取本地或远程设备的MAC地址
# 快速开始
# IP地址处理
// 获取本地IP地址
String localIp = NetUtil.getLocalhostStr();
// 输出: 192.168.1.100
// 检测IP地址是否有效
boolean isValid = Ipv4Util.isValid("192.168.1.1");
// 输出: true
// IP地址转换为long
long ipLong = Ipv4Util.ipv4ToLong("192.168.1.1");
// 输出: 3232235777
// long转换为IP地址
String ip = Ipv4Util.longToIpv4(3232235777L);
// 输出: 192.168.1.1
# 端口检测
// 检测端口是否可用
boolean isPortAvailable = NetUtil.isUsableLocalPort(8080);
// 输出: true
// 检测远程主机端口是否开放
boolean isPortOpen = NetUtil.isOpen("www.baidu.com", 80);
// 输出: true
# URL处理
// URL编码
String encodedUrl = UrlUtil.encode("http://www.baidu.com?name=测试");
// 输出: http://www.baidu.com?name=%E6%B5%8B%E8%AF%95
// URL解码
String decodedUrl = UrlUtil.decode("http://www.baidu.com?name=%E6%B5%8B%E8%AF%95");
// 输出: http://www.baidu.com?name=测试
# MAC地址处理
// 获取本地MAC地址
List<String> macList = MacAddressUtil.getAllLocalMacs();
// 输出: [00:00:00:00:00:00]
// 格式化MAC地址
String formattedMac = MacAddressUtil.formatMac("00-00-00-00-00-00");
// 输出: 00:00:00:00:00:00
# 总结
网络模块是Hutool的核心模块之一,提供了丰富的网络相关功能。通过使用该模块,可以大大简化Java中的网络操作,提高开发效率。无论是简单的IP地址处理,还是复杂的网络连接管理,Hutool都能提供简洁高效的解决方案。
接下来,我们将详细介绍网络模块中的核心工具类,包括NetUtil、Ipv4Util、Ipv6Util等,帮助大家更好地理解和使用这些工具类。