gpt4 book ai didi

c++ - Windows 中编程级别的 IPv6

转载 作者:可可西里 更新时间:2023-11-01 13:12:42 25 4
gpt4 key购买 nike

在 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。

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

bind()、listen() 和 accept() 大同小异。一旦建立了套接字,读、写等就与IP版本无关了。

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

关于c++ - Windows 中编程级别的 IPv6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5620928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com