cocos2dx 网络编程(CCHttpRequest和CURL两个方式)
转自:http://blog.csdn.net/sg619262284/article/details/20144087
在使用之前需要设置一些参数:参考:http://blog.csdn.net/wangbin_jxust/article/details/9632771
在完成上面的操作后,还需要在链接器的输入里面添加一个参数pthreadVCE2.lib;
使用CCHttpRequest方法实现:(异步连接)
void HallView::Qudian()
{
//网络异步连接方法
cocos2d::extension::CCHttpRequest* postRequest=new cocos2d::extension::CCHttpRequest();
postRequest->setRequestType(cocos2d::extension::CCHttpRequest::kHttpPost);//设置发送类型
postRequest->setUrl("");//设置网址
postRequest->setResponseCallback(this,callfuncND_selector(HallView::onHttpRequestCompleted));//回调函数,处理接收到的信息 string caozuo="";
CCString *data=CCString::stringWithString(caozuo);
postRequest->setRequestData(data->getCString(),data->length());//这里的代码会接在网络地址后面,一起发送。 cocos2d::extension::CCHttpClient* httpClient=cocos2d::extension::CCHttpClient::getInstance();
httpClient->setTimeoutForConnect();<span style="font-family: Arial, Helvetica, sans-serif;">//设置连接超时时间</span>
httpClient->setTimeoutForRead();//设置发送超时时间
httpClient->send(postRequest);//设置接收数据类型
postRequest->release();//释放
}
添加一个回调方法。
void HallView::onHttpRequestCompleted(cocos2d::CCNode *sender ,void *data)
{
cocos2d::extension::CCHttpResponse* response=(cocos2d::extension::CCHttpResponse*)data;
if(!response) {CCLOG("Log:response =null,plase check it."); return;} //请求失败
if(!response->isSucceed())
{
this->removeChildByTag(Animate_loading,true);
CCDictionary* pDict = CCDictionary::createWithContentsOfFile("chines.xml");
platform::showMsg(((CCString*)pDict->objectForKey("networking"))->getCString());
CCLOG("ERROR BUFFER:%s",response->getErrorBuffer());
return;
} int codeIndex=response->getResponseCode();
const char* tag=response->getHttpRequest()->getTag(); //请求成功
std::vector<char>* buffer=response->getResponseData();
std::string temp(buffer->begin(),buffer->end());
CCString* responseData=CCString::create(temp);
Json::Reader reader;//json解析
Json::Value value;//表示一个json格式的对象
if(reader.parse(responseData->getCString(),value))//解析出json放到json中区
{
//这里就可以对返回来的信息做处理
} }
使用异步连接,程序和联网的方法将互相不干扰,联网方法将为一个独立的线程。
使用CURL方法实现:(同步连接)
第一个方法
需要加入 头文件#include "curl/curl.h"
void HallView::denglu(){ //登陆游戏
CURL *curl;
CURLcode res;
string cc;
curl=curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_URL, ""); //设置请求的地址
curl_easy_setopt(curl, CURLOPT_POST, true); //设置数据类型
string caozuo="";
curl_easy_setopt(curl, CURLOPT_POSTFIELDS,caozuo.c_str()); //将操作代码,和连接的网站组合,一起发送!
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,HallView::writehtml); //数据处理回调函数
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &cc);//缓冲的内存
curl_easy_setopt(curl,CURLOPT_TIMEOUT_MS,); //设置连接超时时间
res=curl_easy_perform(curl);
if(res!=CURLE_OK)
{
CCDictionary* pDict = CCDictionary::createWithContentsOfFile("chines.xml");
string mes=((CCString*)pDict->objectForKey("networking"))->getCString();
platform::showMsg(mes);
}
curl_easy_cleanup(curl);
}
else
{
CCLog("curl is null");
}
}
在定义回调函数:这个方法为静态方法,如果里面要引用其他变量,需要为静态变量。
size_t HallView::writehtml(uint8_t* ptr,size_t size,size_t number,void *stream)
{
CCString* a=CCString::createWithFormat("%s",ptr);
std::string str1=a->getCString();
Json::Reader reader;//json解析
Json::Value value;//表示一个json格式的对象
if(reader.parse(str1,value))//解析出json放到json中区
{
string out=value["gameId"].asString();
gameda->gameId=out;
out=value["newIMSI"].asString();
gameda->newIMSI=out;
}
return size*number;//这里一定要返回实际返回的字节数
}
在.h中定义:
static size_t writehtml(uint8_t* ptr,size_t size,size_t number,void *stream);
使用同步连接,联网方法的启动就直接阻塞游戏主进程的运行,直到获取到返回值为止。
如果,获取的返回值是josn格式,我的博客中有方法非常方便提取指定的值。
cocos2dx 网络编程(CCHttpRequest和CURL两个方式)的更多相关文章
- 【独立开发人员er Cocos2d-x实战 013】Cocos2dx 网络编程实战之星座运势
学习cocos2d-x和cocos creator的圈子:cocos2d-x:436689827 cocos creator:124727696 本篇文章主要内容:jsoncpp的使用,Coco ...
- Java 网络编程(二) 两类传输协议:TCP UDP
链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951841.html 两类传输协议:TCP,UDP TCP TCP是Transfer C ...
- Cocos2d-x 网络编程
主要介绍内容:Http协议,Socket协议,webSocket协议, Cocos2d-x中的相关类和方法 1 Http协议 HTTP协议也叫超文本传输协议.是互联网广泛使用的通信协议,常用于B/S架 ...
- Cocos2d-X网络编程(4) Cocos2d中的网络通信协议——Socket通信
Socket,俗称网络套接字,本身并不是协议,而是一个调用接口,是对TCP/IP协议的封装和应用,.提供了一系列方法方便开发者进行网络通讯. TCP/IP协议是使用最早的通讯协议,它是传输层协议,主要 ...
- (原创)用Receiver和SystemService监听网络状态,注册Receiver的两种方式
android中网络编程不可避免地要监听网络状态,wifi或者3G以及以太网,并根据当前状态做出相应决策. 在MyReceiver类中的onReceive方法中获得系统服务 ConnectivityM ...
- iOS 通过URL网络获取XML数据的两种方式
转载于:http://blog.csdn.net/crayondeng/article/details/8738768 下面简单介绍如何通过url获取xml的两种方式. 第一种方式相对简单,使用NSD ...
- Cocos2d-X网络编程(2) Cocos2d中的网络通信协议——http协议
HTTP协议也叫超文本传输协议.是互联网广泛使用的通信协议,常用于B/S架构中. HTTP连接使用的是短连接形式,也就是"请求-响应"的方式,不仅在请求时需要先建立连接,而且需要客 ...
- Cocos2d-X网络编程(1) 网络基本概念
网络模型 OSI层模型.TCP/IP的层模型如下所示. TCP/IP各层对应的协议如下所示. 通过初步的了解,我知道: IP协议:对应于网络层,是网络层的协议, TCP协议:对应于传输层,是传输层的协 ...
- Cocos2d-X网络编程(5) 使用Rapidjson解析数据
Json基础及28种c++解析库性能对比 JSON 概念和特点: JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON ...
随机推荐
- JS面向对象组件 -- 继承的其他方式(类式继承、原型继承)
继承的其他形式: •类式继承:利用构造函数(类)继承的方式 •原型继承:借助原型来实现对象继承对象 类 : JS是没有类的概念的 , 把JS中的构造函数看做的类 要做属性和方法继承的时候,要分开继 ...
- delphi TeeChart保存3种图片文件
var vForm: Tfrm_ChemaShowMainChild;begin vForm := GetActiveForm; vForm.cht_Edit.SaveToMetafile('C:\1 ...
- go 应用程序性能测试
runtime/pprof 我们要加入对pprof包里的方法调用,程序才能将运行时候程序的堆内存分配状态记录到文件(也可以是写到其他地方,例如网络等)中,以便进一步的分析. 如果你的go程序只是一个应 ...
- HDU5812 Distance 构造,预处理
分析:怎么看都是超时,但是可以先筛一遍1e6以内的每个数的最小素数 算出每个数由多少个素数组成,然后应用,c[1e6][20] 就是题解的那一套,参照题解,比赛的时候没有想到好的办法筛一个数的因子,醉 ...
- 企业高并发的成熟解决方案(一)video(笔记&知识点)
知识点 答案 什么是高可用(HA) 高并发发生在哪两处 app服务器会出现什么问题,有哪些解决方案? 数据库并发有什么要求? hadoop集群的作用 负载均衡的功能有哪些 负载均衡的分类 哪种负载均衡 ...
- OpenGl从零开始之坐标变换(下)
这节主要来理解投影变换和视口变换的使用. 1.正射投影:glOrtho 函数原型: void glOrtho(GLdouble left,GLdouble right,GLdouble bottom, ...
- 2014搜狗前端面经【A事业部】
刚刚面完搜狗,有种莫名其妙的感觉,哪里莫名其妙呢?听我慢慢道来... 开始面试官就这简历,问了一些有的没的东西,都不深(好吧我承认之前的经历有点菜,没神马加分项啊). 后面开始技术面: 知识点1:JS ...
- Sunrise Release Version History
Sunrise Release Version History 1.4.1.0 1.1.0.0 1.0.1.0
- 初识-----基于Socket的UDP和TCP编程及测试代码
一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...
- Linux网卡启动报错(this device is not active)
重启网络服务 service network restart 报如下错误: shutting down interface eth0: error:device "eth0" ...