Windows中编程级别的IPv6

Vij*_*jay 7 c++ windows ipv6

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

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

Mic*_*l J 2

这实际上取决于您的程序的作用。

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

创建套接字几乎是相同的:

            sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
Run Code Online (Sandbox Code Playgroud)

只需将 PF_INET 更改为 PF_INET6 即可。

连接有点不同:

            nRet = connect(sock, 
                           reinterpret_cast<SOCKADDR *>(&SockAddr), 
                           sizeof(SockAddr));
Run Code Online (Sandbox Code Playgroud)

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

您必须使用 getaddrinfo() 之类的东西来初始化 SockAddr,因为 gethostbyname() 不适用于 IPV6。

bind()、listen() 和accept() 更加相同。套接字一旦建立,读、写等就与IP版本无关。

如果您在更高级别(例如 HTTP)上工作,您的程序不需要任何更改,但它可能需要链接到不同的库。