
转载:http://blog.csdn.net/zhengyayuan123/article/details/51690623
留着备用
儿童节后苹果只爱IPv6 Cocos2d-x第一时间支持
http://sanwen8.cn/p/17dTB0M.html
这里只说了更新CURL和libwebsocket网络
以下是两种更新方法,小伙伴可以选择自己喜欢的方式:
一、通过download-deps.py更新
1.修改cocos2dx_root/external/config.Json 来更新第三方库
v3.x用户修改version字段为 v3-deps-94
v2.x用户修改version 字段为 v2-deps-7
2.运行 download-deps.py 脚本更新第三方库
二、通过github页面下载
v3-deps-94:
https://github.com/cocos2d/cocos2d-x-3rd-party-libs-bin/releases/tag/v3-deps-94
v2-deps-7:
https://github.com/cocos2d/cocos2d-x-3rd-party-libs-bin/releases/tag/v2-deps-6
对于Cocos2d-x v2.x的用户,同时还需要修改WebSocket.h和WebSocket.cpp这两个文件以适应新的libwebsocket库,具体参考如下:
https://github.com/cocos2d/cocos2d-x/pull/15666
最后还要告诉大家一个好消息:Cocos2d-x 3.11.1以后的版本将自动支持IPv6,小伙伴们无需升级哦。
那么如果游戏中用的是原生socket该怎么办呢,
值得庆幸的是socket本身是支持ipv6的,网上有方法说将对应的ipv4的改为ipv6的接口如(sockaddr_in 改为sockaddr_in6)等等,方法很多这里不列举了
可我用的不是这种,我是通过域名的方式去做,不管你ipv4还是ipv6都是完美支持的
客户端通过getaddrinfo解析域名,记得freeaddrinfo释放空间
服务器不用做任何修改
废话少说贴代码要紧
下面代码传入ip或者域名,端口
返回socket的句柄
[cpp] view plain copy inttcp_connect(constchar*ip,intport) { charstrIP[100]; sprintf(strIP,"%s",ip); charstrPort[100]; sprintf(strPort,"%d",port); structaddrinfo*aiList,*aip; structaddrinfohint; structsockaddr_in*sinp; intsockfd; interr; charseraddr[INET_ADDRSTRLEN]; shortserport; hint.ai_family=0; hint.ai_socktype=SOCK_STREAM; hint.ai_flags=AI_CANONname; hint.ai_protocol=0; hint.ai_addrlen=0; hint.ai_addr=NulL; hint.ai_canonname=NulL; hint.ai_next=NulL; if((err=getaddrinfo(strIP,strPort,&hint,&aiList))!=0){ printf("getaddrinfoerror:%s\n",gai_strerror(err)); return-1; } boolisConnectOk=false; printf("getaddrinfook\n"); for(aip=aiList;aip!=NulL;aip=aip->ai_next){ sinp=(structsockaddr_in*)aip->ai_addr; if(inet_ntop(sinp->sin_family,&sinp->sin_addr,seraddr,INET_ADDRSTRLEN)!=NulL) printf("serveraddressis%s\n",seraddr); } serport=ntohs(sinp->sin_port); printf("serverportis%d\n",serport); if((sockfd=socket(aip->ai_family,SOCK_STREAM,0))<0){ printf("createsocketFailed:%s\n",strerror(errno)); isConnectOk=false; continue; printf("createsocketok\n"); if(connect(sockfd,aip->ai_addr,aip->ai_addrlen)<0){ printf("can'tconnectto%s:%s\n",strIP,strerror(errno)); isConnectOk=continue; true; break; freeaddrinfo(aiList); if(isConnectOk){ returnsockfd; } 总结
以上是内存溢出为你收集整理的如何升级cocos2d-x来支持ipv6以及socket怎么支持ipv6全部内容,希望文章能够帮你解决如何升级cocos2d-x来支持ipv6以及socket怎么支持ipv6所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)