在上一篇博客中,咱们一块儿学习了如何在Cocos2d-x中存储数据和读取信息,本篇博客咱们将一块儿讨论和数据存储一样重要的联网技术。php
1、弱联网技术介绍html
在网络游戏中许多重要的功能都须要网络链接,而根据须要的不一样,这些链接大致可分为弱联网和强联网两种。好比,在《微信飞机大战》或者《开心消消乐》这类的游戏中,玩家在本地进行游戏,只有最后才会上传成绩到服务器进行排名或者将成绩分享。这样数据量和频率都比较低的网络通讯就可使用弱联网技术。而在一些须要实时对话或者处理大量的数据的游戏中弱联网就再也不适合,须要使用强联网技术了。c++
通常来讲,弱联网技术都采用了某种web方式经过HTTP协议来传输数据,而强联网技术则经过Socket的方式由开发者根据须要来制定某种协议进行通讯。git
2、经过HTTP协议获取网站信息github
在Cocos2d-x中使用HTTP协议传输数据的话,须要用到第三方库CURL。在使用第三方库以前,须要先将它添加到项目中,具体作法以下:web
1.在vs中选中项目而且右键,选择属性,而后在下图的位置中引入libcurl_imp.lib库:编程
2.而后在vc++目录的包含目录里面引入curl.h的路径,以下图,填入你的cocos引擎中curl.h的绝对路径就能够了。安全
好了。开发环境配置完了,下面开始写代码了,照例仍是先上一下代码和效果图而后再解释:服务器
1 bool HelloWorld::init() 2 { 3 if (!Layer::init()) 4 { 5 return false; 6 } 7 curl_global_init(CURL_GLOBAL_ALL); //对CURL的全局变量进行初始化 8 CURL* curl = curl_easy_init(); 9 curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com/"); //设置访问的URL 10 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, info_output); //设置回调函数用以处理get到的信息 11 CURLcode success = curl_easy_perform(curl); //返回HTTP请求的状态 12 curl_global_cleanup(); //清除CURL全局变量 13 return true; 14 } 15 size_t HelloWorld::info_output(void* buffer, size_t size, size_t nmemb, void *userp) 16 { 17 CCLOG("============================================================"); 18 CCLOG("%s", buffer); 19 CCLOG("============================================================"); 20 return 0; 21 }
运行效果:微信
首先,在使用CURL以前要进行环境的初始化工做,使curl_global_init(CURL_GLOBAL_ALL)就能够进行全局变量初始化工做,如代码第7行所示。以后使用curl_easy_init()语句建立一个对象而且完成对象的初始化工做,如代码第8行所示。代码的第9行和第10行是用来设置一些HTTP请求的参数,包括须要访问的URL地址和经过哪一个方法处理返回的信息。当咱们接收到信息之后就可使用log函数打印输出了。最后别忘了使用curl_global_cleanup()方法作清理工做,不然会形成没必要要的资源占用。
3、经过HTTP协议向服务端发送请求
在HTTP中有两种向服务器发送信息的方式分别是GET和POST方式,相信稍微有一些网络编程经验的朋友对他们必定不会陌生。在Cocos2d-x中经过GET\POST发送信息的方法也和web编程中的大同小异,下面咱们就来了解一下。
1.GET方法传递数据
经过GET方式传递数据是比较简单的,只要在URL后面添加参数就能够了。
curl_easy_setopt(curl, CURLOPT_URL, "http://www.xxx.com/test.php?id=123&type=5");
2.POST方法传递数据
相对GET方法,POST方法使用起来比较复杂,须要以下的代码:
curl_easy_setopt(curl, CURLOPT_URL, "http://www.xx.com/test.php"); curl_easy_setopt(curl, CURLOPT_POST, true); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "ad=123&type=5"); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
代码的第1行设置了要访问的URL,代码的第2行设置了使用POST方式发送数据,代码第3行设置了须要传递的数据的具体内容,最后一行是设置了在启用时会将服务器返回的"Location:"放在header中递归的返回给服务器。简单来讲就是在使用POST的方式进行相似登陆的操做时会发生页面跳转,而后CURL会接着去读取跳转后的页面。
最后咱们仍是经过编写一个模仿用户登陆的小实例来演示一下如何使用POST和GET方法向服务器递交数据:
1.服务器端:
首先,可使用PHP编写一个简单的服务器端而后在本地服务器运行,用于处理接收到数据,这里我只是简单的将接收到消息返回给客户端:
1 <?php 2 3 if ( isset($_GET['username']) && isset($_GET['password']) ) 4 echo 'username is '.$_GET['username'].' and password is '.$_GET['password']; 5 else if ( isset($_POST['username']) && isset($_POST['password']) ) 6 echo 'username is '.$_POST['username'].' and password is '.$_POST['password']; 7 else 8 echo 'error'; 9 10 ?>
2.客户端:
咱们对以前的代码稍加改写并添加一些功能就能够用来传递数据了:
1 bool HelloWorld::init() 2 { 3 if (!Layer::init()) 4 { 5 return false; 6 } 7 curl_global_init(CURL_GLOBAL_ALL); //对CURL的全局变量进行初始化 8 CURL* curl = curl_easy_init(); 9 //首先使用GET方法发送数据 10 curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/Test/test.php?username=admin&password=123456"); 11 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, info_output_get); //设置回调函数用以处理获取到的信息 12 CURLcode success = curl_easy_perform(curl); //返回HTTP请求的状态 13 //而后使用POST方法发送数据 14 curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/Test/test.php"); 15 curl_easy_setopt(curl, CURLOPT_POST, true); 16 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "username=admin&password=123456"); 17 curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); 18 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, info_output_post); //设置回调函数用以处理获取到的信息 19 success = curl_easy_perform(curl); //返回HTTP请求的状态 20 curl_global_cleanup(); //清除CURL全局变量 21 return true; 22 } 23 size_t HelloWorld::info_output_get(void* buffer, size_t size, size_t nmemb, void *userp) 24 { 25 CCLOG("===========================GET METHOD============================"); 26 CCLOG("%s", buffer); 27 CCLOG("============================================================"); 28 return 0; 29 } 30 31 32 size_t HelloWorld::info_output_post(void* buffer, size_t size, size_t nmemb, void *userp) 33 { 34 CCLOG("============================POST METHOD========================="); 35 CCLOG("%s", buffer); 36 CCLOG("============================================================"); 37 return 0; 38 }
运行演示:
能够看到,程序分别使用GET和POST方法发送数据到了服务端,而且各自调用了相应的函数来处理服务器端返回的数据。
最后再总结一下GET和POST两种方法的优缺点:
1.GET方式传递的数据大小不能超过2KB,而POST方式在理论上是能够无限大的。
2.POST方式比GET方式更加安全。
3.GET方式调试起来更加方便。
本篇博客代码已经同步至Github,欢迎fork!
地址:https://github.com/XINCGer/Cocos2d-X_Tools/tree/master/Cocos2d-x_Demo/WeakNetworking
好了,关于Cocos2d-x的弱联网技术就介绍到这里了,强联网技术主要使用的是Socket编程和多线程编程的使用,其实和Linux下的socket编程、多线程编程差很少,具体使用方法能够参考《UNIX网络编程卷1》或者其它相似书籍及博客。
做者:马三小伙儿
出处:http://www.cnblogs.com/msxh/p/5790767.html 请尊重别人的劳动成果,让分享成为一种美德,欢迎转载。另外,文章在表述和代码方面若有不妥之处,欢迎批评指正。留下你的脚印,欢迎评论!