目前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

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

被折叠的 条评论
为什么被折叠?



