C++中的IPv6网络程序设计
AI_INET或PF_INET(IPv4地址簇);AI_INET6或PF_INET6(IPv6地址簇);AI_UNSPEC(未指定,可能是IPv4或IPv6 地址簇)
l ai_socktype选值:SOCK_DGRAM(UDP类型套接字);SOCK_STREAM (TCP类 型套接字) l ai_protocol 选值:IPPROTO_TCP (TCP/IP协议) 如果函数解析成功,解析后的地址将通过res返回。如果名称被解析为多个地址,则返回一个由ai_next 字段形成的链表。每个由名称解析的地址在ai_addr中表示,长度在ai_addrlen中表示。 2.getnameinfo()函数与getaddrinfo()相对应,功能相反。
以上参数的含义比较明显,不再一一说明。 3.释放函数:freeaddrinfo(res); 四、兼容IPv4和IPv6的网络程序设计 兼容IPv4和IPv6的网络程序,显然涉及到两个部分:客户机和服务器。 在Windows 网络编程中,Winsock是一种标准的API(应用程序接口),Winsock2版本已经发展成独立于协议的的接口,被广泛应用于Windows平台中。 <一>客户机程序设计 对于客户机来说,不管是建立TCP/UDP 连接,它都应知道服务器的主机名或IP 地址,同时将服务器地址解析为IPv4或IPv6地址都可以,一般可以考虑一下步骤:
1.用getaddrinfo() 函数解析地址。hins结构中 使用AF_UNSPEC标志,便可以获得地址簇类型(IPv4或IPv6)。
用返回的addrinfo结构中的ai_family,ai_socketype,ai_protocol字段来创建套接字。
2.使用返回的addrinfo结构中的ai_addr来调用其他函数(connect(),send()等).。
<二>服务器程序设计 服务器程序设计,应考虑到IPv4和IPv6 都具有各自的堆栈;因此如果服务器希望能同时接受IPv4和IPv6的连接,就必须能同时创建IPv4和IPv6套接字;一般可以考虑一下步骤:
1. 调用getaddrinfo()函数,该结构包含AI_PASSIVE,AF_UNSPEC标志,以及所需的套接字类型、协议及所需的本地端口(用来监听和接受数据等)。函数将返回的两个addrinfo结构,分别可用于IPv4和IPv6监听地址:[Page]
2. 用返回的addrinfo结构中的ai_family,ai_socketype,ai_protocol字段来创建套接字后;便可以使用addrinfo |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |