我想知道与IPv4下相比我的代码在IPv6下需要做那些变化?现在就告诉我!
好好!
首先声明这里的所说的都是大概,要知道网络方面的知识真的很多。
1、使用getaddrinfo()获得结构sockaddr。这样做可以保证你的IP版本无关,并且可以除去许多后续步骤。
2、在任何与IP有关的部分,试着加入帮助函数。
3、修改AF_INET为AF_INET6
4、修改PF_INET为PF_INET6
5、修改INADDR_ANY为in6addr_any,有点下同。
Struct sockaddr_in sa;
Struct sockaddr_in6 sa6;
Sa.sin_addr.s_addr = INADDR_ANY; //使用IPv4地址
Sa6.sin6_addr= in6addr_any; //使用IPv6地址
也可以使用IN6ADDR_ANY_INIT来初始化struct in6_add像下面这样:
Struct in6_addr ia6 = IN6ADDR_ANY_INIT;
6、使用结构sockadd_in6替换结构sockaddr_in。注意:没有sin6_zero域。
7、使用结构in6_addr替换in_addr。
8、使用inet_pton()替换inet_aton()或inet_addr()
9、使用inet_ntop()替换inet_ntoa()
10、 使用getaddrinfo()替换gethostbyname()
11、 使用getaddrinfo()替换gethostbyaddr() (注:gethostbyaddr()也可以在IPv6下工作)。
12、 INADDR_BROADCAST不被IPv6支持,可以使用IPv6的组播替换。