c++对ipv4和ipv6地址的兼容处理

本文探讨了在网络应用开发中如何实现IPv6与IPv4的兼容性,介绍了使用联合体存储不同地址类型的方法,提供了获取和转换IPv4与IPv6地址的示例代码,并解释了IPv4到IPv6地址映射的原理。

目前ipv6的应用越来越广泛,慢慢将变成强制的标准,做网络应用开发的,在未来会越来越的要开始支持ipv6,但是ipv6肯定不是一下子就可以大范围应用的,必然有一段时间Ipv4与ipv6共存,要做到对ipv4和ipv6的同时支持。

 

关于如何让程序支持ipv6 可以参考  https://blog.csdn.net/v6543210/article/details/106927210

示例代码见: https://github.com/alongL/ipv6_demo

这个文章只讲如何兼容ipv4和ipv6

如果使用asio这样成熟的网络库,就无需再看此文,asio已经将底层的差别屏蔽。

这里只讨论从socket层面自已开发网络库时,支持ipv4 和ipv6会遇到的情况。

 

1.地址表示

使用这样的结构体既可以表示ipv4的地址,又可以表示ipv6地址

struct myaddrinfo{
    int     ai_family;     
	union 
	{
		struct sockaddr addr;
		struct sockaddr_in addr4;
		struct sockaddr_in6 addr6;
	};
};

union联合体中的三个结构体 大概如下所示(与标准有一些区别,主要方便理解): 源自https://blog.csdn.net/albertsh/article/details/80991684


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路边闲人2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值