Java网络编程从入门到精通(10):Inet4Address类和Inet6Address类

简介:
  为了区分 IPv4 IPv6 地址, Java 提供了两个类: Inet4Address Inet6Address ,它们都是 InetAddress 类的子类,这两个类的定义如下:
public   final   class  Inet4Address  extends  InetAddress
public   final   class  Inet6Address  extends  InetAddress
这两个类分别按着IPv4 IPv6 的规则实现了InetAddress 类中的public 方法。它们所不同的是Inet6Address 类比Inet4Address 类多了一个方法:isIPv4CompatibleAddress ,这个方法用来判断一个IPv6 地址是否和IPv4 地址兼容。和IPv4 兼容的IPv6 地址除了最后四个字节有值名,其他的字节都是0 ,如0:0:0:0:0:0.192.168.18.10 ::ABCD:FAFA 都是和IPv4 兼容的IPv6 地址。
当使用InetAddress 类的四个静态方法创建InetAddress 对象后,可以通过getAddress 返回的byte 数组来判断这个IP 地址是IPv4 还是IPv6 地址(byte 数组长度为4 就是IPv4 地址,byte 数组长度为16 就是IPv6 地址),也可以将instanceof 来确定InetAddress 对象是它的哪个子类的实例。下面的代码 演示了如何判断一个IP 地址是IPv4 还是IPv6 地址:
package  mynet;

import  java.net. * ;

public   class  MyIP
{
    
public   static   void  main(String[] args)  throws  Exception
    {
        
if  (args.length  ==   0 )
            
return ;
        InetAddress address 
=  InetAddress.getByName(args[ 0 ]);
        System.out.println(
" IP:  "   +  address.getHostAddress());
        
switch  (address.getAddress().length)
        {
            
case   4 :
                System.out.println(
" 根据byte数组长度判断这个IP地址是IPv4地址! " );
                
break ;
            
case   16 :
                System.out.println(
" 根据byte数组长度判断这个IP地址是IPv6地址! " );
                
break ;
        }
        
if  (address  instanceof  Inet4Address)
            System.out.println(
" 使用instanceof判断这个IP地址是IPv4地址! " );
        
else   if  (address  instanceof  Inet6Address)
            System.out.println(
" 使用instanceof判断这个IP地址是IPv6地址! " );
    }
}
测试 1
执行如下命令: 
java mynet.MyIP www.csdn.net
运行结果:
IP:  211.100.26.122
根据byte数组长度判断这个IP地址是IPv4地址!
使用instanceof判断这个IP地址是IPv4地址! 
测试 2
执行如下命令:
java mynet.MyIP www.neu6.edu.cn
运行结果
IP:  2001 :da8: 9000 :b255: 200 :e8ff:feb0:5c5e
根据byte数组长度判断这个IP地址是IPv6地址!
使用instanceof判断这个IP地址是IPv6地址!


 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/214460,如需转载请自行联系原作者



相关文章
|
5天前
|
监控 Java 开发者
深入理解 Java 网络编程和 NIO
【4月更文挑战第19天】Java网络编程基于Socket,但NIO(非阻塞I/O)提升了效率和性能。NIO特点是非阻塞模式、选择器机制和缓冲区,适合高并发场景。使用NIO涉及通道、选择器和事件处理,优点是高并发、资源利用率和可扩展性,但复杂度、错误处理和性能调优是挑战。开发者应根据需求选择是否使用NIO,并深入理解其原理。
|
7天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
9天前
|
JavaScript Java 测试技术
基于Java的网络游戏交易系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络游戏交易系统的设计与实现(源码+lw+部署文档+讲解等)
23 0
|
9天前
|
SQL 安全 Java
Java安全编程:防范网络攻击与漏洞
【4月更文挑战第15天】本文强调了Java安全编程的重要性,包括提高系统安全性、降低维护成本和提升用户体验。针对网络攻击和漏洞,提出了防范措施:使用PreparedStatement防SQL注入,过滤和转义用户输入抵御XSS攻击,添加令牌对抗CSRF,限制文件上传类型和大小以防止恶意文件,避免原生序列化并确保数据完整性。及时更新和修复漏洞是关键。程序员应遵循安全编程规范,保障系统安全。
|
12天前
|
JavaScript Java 测试技术
基于Java的网络游戏交易平台信息管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络游戏交易平台信息管理系统的设计与实现(源码+lw+部署文档+讲解等)
25 1
|
14天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
30 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
25天前
|
关系型数据库 Java 开发工具
Java入门高频考查基础知识9(15问万字参考答案)
本文探讨了Spring Cloud的工作原理,包括注册中心的心跳机制、服务发现机制,以及Eureka默认的负载均衡策略。同时,概述了Spring Boot中常用的注解及其实现方式,并深入讨论了Spring事务的注解、回滚条件、传播性和隔离级别。文章还介绍了MySQL的存储引擎及其区别,特别关注了InnoDB如何实现MySQL的事务处理。此外,本文还详细探讨了MySQL索引,包括B+树的原理和设计索引的方法。最后,比较了Git和SVN的区别,并介绍了Git命令的底层原理及流程。
32 0
Java入门高频考查基础知识9(15问万字参考答案)
|
1月前
|
网络协议 算法 Java
|
3月前
|
Java 数据格式
最新Java基础系列课程--Day15-网络编程(三)
最新Java基础系列课程--Day15-网络编程
|
3月前
|
存储 网络协议 Java
最新Java基础系列课程--Day15-网络编程(二)
最新Java基础系列课程--Day15-网络编程