在windows中编程级别的IPv6

IPv6 at programming level in windows

本文关键字:IPv6 编程 windows      更新时间:2023-10-16

在windows的编程级别上IPv6和IPv4有什么区别?

我们可以把IPv4地址改为IPV6,并保持所有其他程序相同,它会工作吗?

这取决于你的程序是做什么的。

IPV6地址占用16字节,而不是IPV4的4字节。字符串表示也不同。

创建套接字的方法几乎相同:

            sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

请将PF_INET更改为PF_INET6。

Connect有一点不同:

            nRet = connect(sock, 
                           reinterpret_cast<SOCKADDR *>(&SockAddr), 
                           sizeof(SockAddr));

在IPV4中,SockAddr是一个sockaddr_in结构,在IPV6中,它是一个sockaddr_in6。

你必须使用像getaddrinfo()的东西来初始化SockAddr作为gethostbyname()不工作的IPV6。

bind()、listen()和accept()更类似。一旦套接字建立,读取、写入等操作与IP版本无关。

如果你在一个更高的层次(比如HTTP)工作,你的程序不需要任何改变,但是它可能需要链接到不同的库。

IPv6规范(RFC 3493)定义了一些新的API方法和数据结构。微软在Windows中实现了早期版本的API (RFC 2553),因此存在一些差异。这个链接描述了不同之处,并分解了在哪个版本的Windows上支持哪些API:

http://tdistler.com/2011/02/28/cross-platform-ipv6-socket-programming