IPv6在编程级别的Windows

在Windows中编程级别的IPv6和IPv4有什么区别?

我们可以将IPv4地址更改为IPV6并保持所有其他程序相同,是否可以使用?


这真的取决于你的程序的功能。

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。

因为gethostbyname()不适用于IPV6,所以必须使用类似getaddrinfo()的方法来初始化SockAddr。

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

链接地址: http://www.djcxy.com/p/51939.html

上一篇: IPv6 at programming level in windows

下一篇: MonoTouch 4.0 throwing ReflectionTypeLoadException using the simulator