Java 网络编程之 InetAddress 类详解,URL 和 URI 的区别,URLDecoder 和 URLEncoder,IPv6 和 IPv4 区别,IPv6 的三种表示方法
InetAddress
Java 提供了 InetAddress 类来代表 IP 地址,InetAddress 下还有两个子类:Inet4Address
、Inet6Address
,它们分别代表 Internet Protocol version 4(IPv4)地址和 Internet Protocol version 6(IPv6)地址。InetAddress 常用方法:验证是否可达:
boolean isReachable(int timeout)
:等价于 isReachable(null, 0 , timeout)boolean isReachable(NetworkInterface netif, int ttl, int timeout)
:测试该地址是否可达。netif – 将通过其完成测试的 NetworkInterface,或者为任何接口为 null
ttl – 要尝试的最大跳数或默认值为 0,负值将导致抛出 IllegalArgumentException。
timeout – 超时值(以毫秒为单位)指示尝试应花费的最长时间。 如果操作在得到应答前超时,则认为主机不可达。负值将导致抛出 IllegalArgumentException。
获取 InetAddress 实例:
getByName(String host)
:根据主机获取对应的 InetAddress 对象实例。getByAddress(byte[] addr)
:根据原始 IP 地址 来 获取对应的 InetAddress 对象实例。
获取 InetAddress 实例对应的 IP 地址和主机名:
String getHostName()
:获取此 IP 地址的主机名 。String getCanonicalHostName()
:获取此 IP 地址的全限定域名 。String getHostAddress()
:返回该 InetAddress 实例对应的 IP 地址字符串(以字符串形式)。byte[] getAddress()
:获取原始 IP 地址。
其他:
boolean isMulticastAddress()
:检查 InetAddress 是否为 IP 多播地址的实用程序例程。IP v4 多播地址是 D 类地址,即地址的前四位是 1110;
IPv6 地址开头的 11111111 将该地址标识为多播地址。
boolean isAnyLocalAddress()
:检查 InetAddress 是否为通配符地址的实用程序例程。boolean isLoopbackAddress()
:用于检查 InetAddress 是否为回环地址的实用程序。(127.x.x.x)boolean isLinkLocalAddress()
:检查 InetAddress 是否为链路本地地址的实用程序例程。(169.254.0.0/16)
代码案例如下:
URL 和 URI
URL 是全球资源定位符的英文所写,在浏览器中输入的地址就是 URL。比如:https://blog.csdn.net/qq_35427589/article/details/124088153就是一个 URL。
URL 包含以下信息:
用于访问资源的协议
服务器的位置(无论是通过 IP 地址还是域名)
服务器上的端口号(可选)
资源在服务器目录结构中的位置
片段标识符(可选)
URI 是 Web 上可用的每种资源 - HTML 文档、图像、视频片段、程序,由一个通过通用资源标志符(Universal Resource Identifier, 简称"URI")进行定位。
URL 和 URI 差别
URL(统一资源定位符)主要用于链接网页,网页组件或网页上的程序,借助访问方法(http,ftp,mailto 等协议)来检索位置资源。
URI 是一个相对来说更广泛的概念。URL 是 URI 的一种,是 URI 命名机制的一个子集,能够说 URI 是抽象的,而详细要使用 URL 来定位资源。
Web 上的每一种资源如:图片、文档、视频等,都是由 URI 定位的。这里所谓的定位指的是 web 上的资源相对于主机 server 来说,存放在 server 上的详细路径。
URL 是 internet 上用来描写叙述信息资源文件的字符串。用在客户程序和 server 上,定位客户端连接 server 所须要的信息,它不仅定位了这个信息资源,并且定义了怎样找到这个资源。
URL 指定要使用的协议类型,而 URI 不涉及协议规范。
java.net.URL
常用构造函数和方法:构造函数:URL(String url)
:根据 url 构建一个 URL 对象URL(String protocol, String host, int port, String file)
:创建一个 URL 从指定对象 protocol,host,port 号码,和 file。方法:String getFile()
:获取此文件的名称 URL。String getHost()
:获取此主机名(URL 如果适用)。String getPath()
:获取此部分的路径部分 URL。int getPort()
:获取此 URL 的端口号。
URLDecoder 和 URLEncoder
URLDecoder 和 URLEncoder 的作用主要是用于普通字符串和 application/x-www-form-rulencoded MIME 字符串之间的转换 URLDecoder 类包含一个decode(String s,String charcter)
静态方法,它可以将看上去乱码的特殊字符串转换成普通字符串。URLEncoder 类包含一个encode(String s,String charcter)
静态方法,它可以将普通字符串转换成 application/x-www-form-urlencoded MIME 字符串。代码案例:
输出如下:urlDecode:https://blog.csdn.net/qq_35427589/article/details/122321132?ops_request_misc=&request_id=&biz_id=102&utm_term=共饮一杯无urlEncode:%E5%85%B1%E9%A5%AE%E4%B8%80%E6%9D%AF%E6%97%A0
扩展资料
Internet Protocol version 4(IPv4)地址和 Internet Protocol version 6(IPv6)
在电脑的控制面板网络连接中可以看到 IPv4 和 IPv6 的存在。
IPv6 和 IPv4 都是“互联网协议”,IPv6 是用于替代 IP 协议(IPV4)的下一代 IP 协议。
IPv6 的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网(物联网)的障碍。
由于 IPv4 最大的问题在于网络地址资源不足,严重制约了互联网的应用和发展。IPv6 的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍。
IPv 4 报头格式中一些冗余的域或被丢弃或被列为扩展报头,从而降低了包处理和报头带宽的开销。虽然 IPv6 的地址是 IPv4 地址的 4 倍。但报头只有它的 2 倍大。
IPv6 的地址长度为 128 位,是 IPv4 地址长度的 4 倍,使 IP 地址在可预见的将来不会用完。于是 IPv4 点分十进制格式不再适用,采用十六进制表示。
IPv6 中加入了关于身份验证、数据一致性和保密性的内容。
IPv6 协议主要定义了三种地址类型:单播地址(Unicast Address)、组播地址(Multicast Address)和任播地址(Anycast Address)。与原来在 IPv4 地址相比,新增了“任播地址”类型,取消了原来 IPv4 地址中的广播地址,因为在 IPv6 中的广播功能是通过组播来完成的。
IPv6 支持无状态自动地址配置,简化了地址配置过程。无需 DNS 服务器也可完成地址的配置,路由广播地址前缀,各主机根据自己 MAC 地址和收到的地址前缀生成可聚合全球单播地址。这也方便了某一区域内的主机同时更换 IP 地址前缀。
IPv6 的三种表示方法
冒分十六进制表示法
格式为 X:X:X:X:X:X:X:X,其中每个 X 表示地址中的 16b,以十六进制表示,例如:
ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
0 位压缩表示法
在某些情况下,一个 IPv6 地址中间可能包含很长的一段 0,可以把连续的一段 0 压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次。
内嵌 IPv4 地址表示法
为了实现 IPv4-IPv6 互通,IPv4 地址会嵌入 IPv6 地址中,此时地址常表示为:X:X:X:X:X:X:d.d.d.d,前 96b 采用冒分十六进制表示,而最后 32b 地址则使用 IPv4 的点分十进制表示,例如::192.168.0.1 与::FFFF:192.168.0.1 就是两个典型的例子,注意在前 96b 中,压缩 0 位的方法依旧适用。
本文内容到此结束了,
如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力
如有错误❌疑问💬欢迎各位指出。
保持热爱,奔赴下一场山海。🏃🏃🏃
版权声明: 本文为 InfoQ 作者【共饮一杯无】的原创文章。
原文链接:【http://xie.infoq.cn/article/cfbdc588ef8a6bc4639c3861c】。文章转载请联系作者。
评论