注:以下说明均是基于Cocos2d-x v2.x引擎下
1.支持https
1.首先跳过服务端、及后台,因为使用的https地址 有SSL证书,所以使用cocos的前端只要网络库支持就够了,先升级完cocos引擎对应网络库.链接如下,自行参考。
http://discuss.cocos2d-x.org/t/supporting-ipv6-only-networks/29266/11
https://github.com/cocos2d/cocos2d-x/pull/15666/commits/43dd696750014efa9b0419a59f72ba1c4cdaba50
2.修改socket content函数
客户端通过getaddrinfo解析域名,记得freeaddrinfo释放空间
bool CCSocket::connect(const char* ip, unsigned short port)
{
if (isConnent) {
return true;
}
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 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) {
CCLOG("getaddrinfo error: %s ", gai_strerror(err));
return -1;
}
CCLOG("getaddrinfo ok ");
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)
{
CCLOG("server address is %s ", seraddr);
}
serport = ntohs(sinp->sin_port);
CCLOG("server port is %d ", serport);
if ((sock = socket(aip->ai_family, SOCK_STREAM, 0)) < 0) {
CCLOG("failed to create socket ");
return false;
}
printf("create socket ok ");
if (::connect(sock, aip->ai_addr, aip->ai_addrlen) < 0) {
CCLOG("failed to connect ");
::close(sock);
return false;
}
break;
}
freeaddrinfo(ailist);
isConnent = true;
CCDirector::sharedDirector()->getScheduler()->scheduleSelector(schedule_selector(CCSocket::update), this, 0, false);
return true;
}
3。搭建测试环境