在windows中编程级别的IPv6
IPv6 at programming level in windows
在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相关文章:
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 模板元编程:如何将参数包组合成新的参数包
- Qt Q串行端口未编程设备未关闭
- 模板元编程 - 尝试实现维度分析
- 我是编程新手
- C++编程从外部文本文件定义数组大小
- 了解算法的性能差异(如果以不同的编程语言实现)
- 使用 Gtkmm 以编程方式选择 Gtk::TextView 中的文本
- 如何将可变参数模板转换为多个单个模板?(C++竞争编程调试模板)
- 将 IPv6 支持添加到雨量计
- 使用命名空间正确编程
- C++编程:运算符重载中的引用如何工作?
- Arduino 模块化编程与全局和设置
- C++ 运算符修改/元编程策略,用于不那么冗长的语法
- 在没有管理员权限的情况下,在 c++ 中以编程方式将程序添加到启动
- 如何以编程方式将音频从任何录制设备路由到任何播放设备
- 通过编程方式获取主机的DNS IPv6服务器
- 检查我的互联网提供商是否支持并在我的操作系统中以编程方式启用IPv6/Teredo
- 在windows中编程级别的IPv6