win32 ipv6 sendto recvfrom
1. sendto
????? 在windows xp下進(jìn)行ipv6的udp網(wǎng)絡(luò)通信時,目標(biāo)地址應(yīng)該像如下方式構(gòu)造
?????? addrinfo hins, *res;
?????? memset(&hins, 0, sizeof(hins));
?????? hins.ai_family = AF_INET6;
?????? hins.ai_socktype = SOCK_DGRAM;
?????? hins.ai_protocal = IPPROTO_UDP;
?????? hins.ai_flags = AI_NUERICHOST;
?????? getaddrinof("128位ipv6目標(biāo)地址 + %n", "端口號", &hins, &res);
?????? sendto(m_socket, buf, sizeof(buf), 0, res->ai_addr, res->ai_addrlen);
?????? linux上是否需要這種方式,沒有實(shí)驗(yàn)。
?????? 需要注意的是,在win32上的網(wǎng)卡的地址后面都有一個%號和一個數(shù)字,這個應(yīng)該是這個網(wǎng)卡的編號,因此,在sendto中的目標(biāo)地址后面要帶上本機(jī)網(wǎng)卡的編號,應(yīng)該是指示系統(tǒng)從制定的網(wǎng)卡發(fā)送數(shù)據(jù),在linux上沒有這個%。
2. recvfrom
???? 在win32上面,用recvfrom接收UDP數(shù)據(jù)時,當(dāng)有數(shù)據(jù)可讀時,recvfrom報(bào)錯,返回10014,估計(jì)也是地址的問題,貌似在win32上,ipv6的地址結(jié)構(gòu)只能用getaddrinfo函數(shù)來構(gòu)造,因?yàn)樵趓ecvfrom的第5個參數(shù)可以得到對端的地址。因此我們用recv函數(shù)即可。在linux上還沒有驗(yàn)證。
總結(jié)
以上是生活随笔為你收集整理的win32 ipv6 sendto recvfrom的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡临时额度有效期有多久
- 下一篇: sip中的100trying到底有啥用