Java网络编程之InetAddress类详解,URL和URI的区别,URLDecoder和URLEncoder,IPv6和IPv4区别,IPv6的三种表示方法
文章目录
- InetAddress
- URL和URI
- URL和URI差别
- URLDecoder和URLEncoder
- 扩展资料
- Internet Protocol version 4(IPv4)地址和Internet Protocol version 6(IPv6)
- 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)
代码案例如下:
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和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字符串。
代码案例:
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: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位的方法依旧适用。
相关文章:
Java网络编程入门(软件结构、网络通信协议、网络编程三要素)
Java网络编程之通过代码实现Socket通信)
Java网络编程之实现文件上传
Java网络编程之InetAddress类详解,URL和URI的区别,URLDecoder和URLEncoder,IPv6和IPv4区别,IPv6的三种表示方法相关推荐
- Java并发编程之Thread类详解
Thread类详解: 线程(Thread): 是操作系统进行调度的最小单位,Java中的线程是对操作系统线程的封装.本文从线程的创建到停止结合代码和具体实例分析一下关于java线程的一些常见问题. 线 ...
- socket网络编程之htons()相关详解
1.走起 ntohs =net to host short int 16位 htons=host to net short int 16位 ntohl=net to host long int 32位 ...
- 网络套接字编程之IO模型详解
网络套接字编程之IO模型详解 本文主要参考自<UNIX网络编程>(第1卷)(套接口API第3版) Unix下可用的五种I/O模型有: 阻塞式I/O 非阻塞式I/O I/O复用(select ...
- Java网络编程之TCP、UDP
Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载. J ...
- Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例
Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...
- 萌新解--Java网络编程之UDP
Java网络编程之UDP UDP协议为无连接的通信协议,在传数据前发送端与接收端不会先建立连接,也就是你发我就收但不一定会收到哦,以我们自身为发送端,我们不会事先让接收方知道我要给接收方发数据啦.就像 ...
- 浅谈Java网络编程之Socket (2)
<浅谈Java网络编程之Socket (1)>中我们已经和大家说到客户端的网络编程,下面和大家分享的是服务器的实现代码. import java.net.*; import java.io ...
- 浅谈Java网络编程之Socket (1)
和大家一起分享的是Java网络编程之Socket.在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是get ...
- Java网络编程之NIO编程(待补充)
Java网络编程之NIO编程(待补充) 学习网站1:http://ifeve.com/java-nio-all/ 学习网站2:http://www.ibm.com/developerworks/cn/ ...
- Java网络编程之IP地址和InetAddress类
Java语言的优势之一是Java程序能访问网络资源.Java提供一系列的类支持Java程序访问网络资源. TCP/IP协议和IP地址 为了进行网络通信,通信双方必须遵守通信协议.目前最广泛使用的是TC ...
最新文章
- redis常用优化及持久化到硬盘
- 详解JavaScript数组(一)
- python方向-零基础转行Python,往这个方向走,绝对没有错
- 线性一致性与全序广播------《Designing Data-Intensive Applications》读书笔记12
- operator new/delete,operator-> / *【C++运算符重载】
- 如何利用CNKI句子检索功能提高研究效率
- 2.Maven特点,Maven约定,建立第一个Maven项目
- [leetcode]203. Remove Linked List Elements链表中删除节点
- 【STM32】SPI相关函数和类型
- java mac 转换 整形_JAVA的整型与字符串相互转换
- python 异常分类_Python异常类型
- prometheus altermanager邮件报警
- JMeter记录篇2——性能测试基础(2)
- 使用layUI弹出输入框并收集输入框信息
- 主引导记录mbr介绍
- 联想家庭版 mysql_联想自带win7家庭版..
- 诺基亚Lumia920竞争力分析软件篇—三星ATIV S、GALAXY S3、HTC One X、iPhone 5对比
- Java去掉字符串首尾的““
- 电信 NB-IoT无缝对接阿里云IoT 物联网平台
- linux amd显卡使用情况查看
热门文章
- php生成字母头像,【PHP】利用现有的PHP库生成简单而独特的头像-----单字符头像生成...
- cf鼠标宏数据大全_两只“轻量、不打孔、右手工学”鼠标,DX30E和魔幻豹ULTRA
- 英语数字听力学习软件操作
- 上班族中流行以貌取人 汉王人脸通变普及
- zend调试php,Zend Studio使用教程:在Zend Studio中调试PHP(4/5)
- vsco使用教程_vsco cam怎么用?vsco cam安卓版使用教程详解
- SpreadJS 15.0.5 SpreadJS Excel在线设计
- atmega328p引脚图_atmega328p中文手册
- puttygen.exe 生产密钥,配置SSH登陆linux服务器
- Python下载安装教程Python3.7版本