写点什么

Java 网络编程之 InetAddress 类详解,URL 和 URI 的区别,URLDecoder 和 URLEncoder,IPv6 和 IP...

作者:Java-fenn
  • 2022 年 9 月 13 日
    湖南
  • 本文字数:3445 字

    阅读完需:约 11 分钟

IPv6 URL 网络编程 JavaInetAddressJava 提供了 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)


代码案例如下:


public void inetAddressTest() throws IOException {    // 根据域名来获取对应的InerAddress实例    InetAddress ip = InetAddress.getByName("www.baidu.com");    // 判断是否可达    System.out.println("百度是否可达:" + ip.isReachable(2000));    // 获取该InetAddress实例的IP字符串    System.out.println(ip.getHostAddress());    //获取主机名(域名)    System.out.println(ip.getHostName());    //获取原始 IP 地址    System.out.println(ip.getAddress());    // 获取该InetAddress实例对应的全限定域名    //System.out.println(ip.getCanonicalHostName());    // 根据原始IP地址来获取对应的InetAddress实例    InetAddress local = InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 });    System.out.println("本机是否可达:" + local.isReachable(1000));}
复制代码


复制代码


URL 和 URIURL 是全球资源定位符的英文所写,在浏览器中输入的地址就是 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 和 URLEncoderURLDecoder 和 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 字符串。代码案例:


public  void URLDecoderURLEncoderTest() throws UnsupportedEncodingException {    //将application/x-www-form-urlencoded字符串转换成普通字符串    String decode = URLDecoder.decode("https://blog.csdn.net/qq_35427589/article/details/122321132?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%85%B1%E9%A5%AE%E4%B8%80%E6%9D%AF%E6%97%A0", "UTF-8");    System.out.println("urlDecode:"+decode);    //将普通字符串转换成application/x-www-form-urlencoded字符串    String encode = URLEncoder.encode("共饮一杯无" , "UTF-8");    System.out.println("urlEncode:"+encode);}
复制代码


复制代码


输出如下: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:67890 位压缩表示法


在某些情况下,一个 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 位的方法依旧适用。

用户头像

Java-fenn

关注

需要Java资料或者咨询可加我v : Jimbye 2022.08.16 加入

还未添加个人简介

评论

发布
暂无评论
Java 网络编程之 InetAddress 类详解,URL 和 URI 的区别,URLDecoder 和 URLEncoder,IPv6 和 IP..._Java_Java-fenn_InfoQ写作社区