如何升级cocos2d-x来支持ipv6以及socket怎么支持ipv6
2016-08-01 13:29
483 查看
转载: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
int tcp_connect(const char* ip, int port)
{
char strIP[100];
sprintf(strIP,"%s",ip);
char strPort[100];
sprintf(strPort,"%d",port);
struct addrinfo *ailist, *aip;
struct addrinfo hint;
struct sockaddr_in *sinp;
int sockfd;
int err;
char seraddr[INET_ADDRSTRLEN];
short serport;
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("getaddrinfo error: %s\n", gai_strerror(err));
return -1;
}
bool isConnectOk = false;
printf("getaddrinfo ok\n");
for (aip = ailist; aip != NULL; aip = aip->ai_next) {
sinp = (struct sockaddr_in *)aip->ai_addr;
if (inet_ntop(sinp->sin_family, &sinp->sin_addr, seraddr, INET_ADDRSTRLEN) != NULL)
{
printf("server address is %s\n", seraddr);
}
serport = ntohs(sinp->sin_port);
printf("server port is %d\n", serport);
if ((sockfd = socket(aip->ai_family, SOCK_STREAM, 0)) < 0) {
printf("create socket failed: %s\n", strerror(errno));
isConnectOk = false;
continue;
}
printf("create socket ok\n");
if (connect(sockfd, aip->ai_addr, aip->ai_addrlen) < 0) {
printf("can't connect to %s: %s\n", strIP, strerror(errno));
isConnectOk = false;
continue;
}
isConnectOk = true;
break;
}
freeaddrinfo(ailist);
if (isConnectOk) {
return sockfd;
}
return -1;
}
留着备用
儿童节后苹果只爱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
int tcp_connect(const char* ip, int port)
{
char strIP[100];
sprintf(strIP,"%s",ip);
char strPort[100];
sprintf(strPort,"%d",port);
struct addrinfo *ailist, *aip;
struct addrinfo hint;
struct sockaddr_in *sinp;
int sockfd;
int err;
char seraddr[INET_ADDRSTRLEN];
short serport;
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("getaddrinfo error: %s\n", gai_strerror(err));
return -1;
}
bool isConnectOk = false;
printf("getaddrinfo ok\n");
for (aip = ailist; aip != NULL; aip = aip->ai_next) {
sinp = (struct sockaddr_in *)aip->ai_addr;
if (inet_ntop(sinp->sin_family, &sinp->sin_addr, seraddr, INET_ADDRSTRLEN) != NULL)
{
printf("server address is %s\n", seraddr);
}
serport = ntohs(sinp->sin_port);
printf("server port is %d\n", serport);
if ((sockfd = socket(aip->ai_family, SOCK_STREAM, 0)) < 0) {
printf("create socket failed: %s\n", strerror(errno));
isConnectOk = false;
continue;
}
printf("create socket ok\n");
if (connect(sockfd, aip->ai_addr, aip->ai_addrlen) < 0) {
printf("can't connect to %s: %s\n", strIP, strerror(errno));
isConnectOk = false;
continue;
}
isConnectOk = true;
break;
}
freeaddrinfo(ailist);
if (isConnectOk) {
return sockfd;
}
return -1;
}
相关文章推荐
- 如何升级cocos2d-x来支持ipv6以及socket怎么支持ipv6
- 升级支持ipv4/ipv6后的Socket处理(cocos2dx项目苹果审核支持ipv6处理二)
- 升级支持ipv4/ipv6后的Socket处理(cocos2dx项目苹果审核支持ipv6处理二)
- 让阿里云支持IPv6以及Socket.io的相关改动笔记
- 阿里云服务器以及CDN支持IPV6的方法+如何为Nginx添加ipv6模块
- 如何实现在一个 Socket 应用程序中同时支持 IPv4 和 IPv6
- 【iOS-cocos2d-X 游戏开发之十四】Xcode中c++&Object-C混编,详细介绍如何在cocos2dx中访问object函数以及Apple Api
- 如何遍历iPhone支持的所有family以及UIFont
- Socket Programming下IPv6的支持
- 关于gcc、glibc和binutils模块之间的关系,以及在现有系统上如何升级的总结
- 支持多次调用 jq.contentShown 升级,带最新最全的演示以及更多的说明(包含内容轮显示例)
- 关于gcc、glibc和binutils模块之间的关系,以及在现有系统上如何升级的总结
- 如何判断一个类是否支持某属性和方法以及如何判断IOS的版本
- 怎么看到自己的积分,以及如何获取积分?
- 关于gcc、glibc和binutils模块之间的关系,以及在现有系统上如何升级的总结
- plupload如何支持csrf与cookie以及rails如何使用
- MongoDB windows 安装以及如何配置python的支持
- VC9.0 Express下如何创建支持VB6的DLL,以及字符串传递
- (转)网络编程:Socket编程从IPv4转向IPv6支持
- 为何以及如何使用Netlink Socket ( Why and How to Use Netlink Socket)