IPv6在编程级别的Windows

Windows中编程级别的IPv6和IPv4有什么不同?

我们可以只将IPv4地址更改为IPV6,并保持所有其他程序相同,是否可以正常工作?

Solutions Collecting From Web of "IPv6在编程级别的Windows"

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

一个IPV6地址需要16个字节,而不是IPV4使用的四个字节。 字符串表示也是不同的。

创建一个套接字几乎是一样的:

sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); 

只要将PF_INET更改为PF_INET6。

连接有点不同:

  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方法和数据结构。 Microsoft在Windows中实现了早期版本的API(RFC 2553),因此存在一些差异。 这个链接描述了这些差异,并分解了哪个版本的Windows支持哪些API:

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