如何升级cocos2d-x来支持ipv6以及socket怎么支持ipv6

前端之家收集整理的这篇文章主要介绍了如何升级cocos2d-x来支持ipv6以及socket怎么支持ipv6前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转载: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的句柄

  1. inttcp_connect(constchar*ip,intport)@H_404_104@
  2. {@H_404_104@
  3. @H_404_104@
  4. charstrIP[100];@H_404_104@
  5. sprintf(strIP,"%s",ip);@H_404_104@
  6. @H_404_104@
  7. charstrPort[100];@H_404_104@
  8. sprintf(strPort,"%d",port);@H_404_104@
  9. structaddrinfo*ailist,*aip;@H_404_104@
  10. structaddrinfohint;@H_404_104@
  11. structsockaddr_in*sinp;@H_404_104@
  12. intsockfd;@H_404_104@
  13. interr;@H_404_104@
  14. charseraddr[INET_ADDRSTRLEN];@H_404_104@
  15. shortserport;@H_404_104@
  16. hint.ai_family=0;@H_404_104@
  17. hint.ai_socktype=SOCK_STREAM;@H_404_104@
  18. hint.ai_flags=AI_CANONNAME;@H_404_104@
  19. hint.ai_protocol=0;@H_404_104@
  20. hint.ai_addrlen=0;@H_404_104@
  21. hint.ai_addr=NULL;@H_404_104@
  22. hint.ai_canonname=NULL;@H_404_104@
  23. hint.ai_next=NULL;@H_404_104@
  24. if((err=getaddrinfo(strIP,strPort,&hint,&ailist))!=0){@H_404_104@
  25. printf("getaddrinfoerror:%s\n",gai_strerror(err));@H_404_104@
  26. return-1;@H_404_104@
  27. }@H_404_104@
  28. boolisConnectOk=false;@H_404_104@
  29. printf("getaddrinfook\n");@H_404_104@
  30. for(aip=ailist;aip!=NULL;aip=aip->ai_next){@H_404_104@
  31. sinp=(structsockaddr_in*)aip->ai_addr;@H_404_104@
  32. if(inet_ntop(sinp->sin_family,&sinp->sin_addr,seraddr,INET_ADDRSTRLEN)!=NULL)@H_404_104@
  33. printf("serveraddressis%s\n",seraddr);@H_404_104@
  34. }@H_404_104@
  35. serport=ntohs(sinp->sin_port);@H_404_104@
  36. printf("serverportis%d\n",serport);@H_404_104@
  37. if((sockfd=socket(aip->ai_family,SOCK_STREAM,0))<0){@H_404_104@
  38. printf("createsocketFailed:%s\n",strerror(errno));@H_404_104@
  39. isConnectOk=false;@H_404_104@
  40. continue;@H_404_104@
  41. printf("createsocketok\n");@H_404_104@
  42. if(connect(sockfd,aip->ai_addr,aip->ai_addrlen)<0){@H_404_104@
  43. printf("can'tconnectto%s:%s\n",strIP,strerror(errno));@H_404_104@
  44. isConnectOk=continue;@H_404_104@
  45. true;@H_404_104@
  46. break;@H_404_104@
  47. freeaddrinfo(ailist);@H_404_104@
  48. if(isConnectOk){@H_404_104@
  49. returnsockfd;@H_404_104@
  50. } @H_404_104@

猜你在找的Cocos2d-x相关文章