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 ...
随机推荐
- MYSQL BENCHMARK函数的使用
MYSQL BENCHMARK函数是最重要的函数之一,下文对该函数的使用进行了详尽的分析,如果您对此感兴趣的话,不妨一看. 下文为您介绍的是MYSQL BENCHMARK函数的语法,及一些MYSQL ...
- Nodepad++ tab改成4个空格
设置-首选项-选项卡设置-使用空格替换
- invalid initialization of non-const reference of type与discards qualifiers
参数传递 函数参数的传递是初始化语义:用调用者的实参去初始化函数的形参,如果参数是对象,需要调用该类的拷贝构造函数,如果没有显式定义的拷贝构造函数,则执行默认的按成员拷贝 ...
- 设置VMWARE通过桥接方式使用主机无线网卡上网(zz)
环境:WIN7旗舰版,台式机,U盘无线上网卡. 虚拟软件:VMware9.0,虚拟系统:CentOS6.4 需要实现虚拟机以独立机形式工作和上网. 先介绍一下VMware网络设置的三种方式 1 Hos ...
- 【LeetCode】14 - Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings. Solution: cla ...
- C#缓存的一点想法及测试
项目开发中,用到了缓存,其中的一个列表项,可能要多线程处理,就有了下面的想法,具体的问题在代码中有详细说明,见下文. static void Main(string[] args) { 测试缓存的想法 ...
- javascript函数sort
sort函数用于对数组的元素进行排序 语法:arrayObject.sort(sortby); 参数sortby可选,规定排序顺序,必须是函数. 如果调用该方法时没有使用参数,将按照字幕顺序进行排序, ...
- 【c_prime_plus】第十七章笔记
抽象数据类型(ADT) 为类型的属性和可对类型执行的操作提供一个抽象的描述,这个米阿叔不受任何实现的约束,甚至不受任何特定编程语言的约束,这样一种正式的抽象描述被称为抽象数据类型. 开一个实现该ADT ...
- WS之cxf处理的复杂类型(Map)
一.服务端: 1.创建接口: package cn.tdtk.ws.dao; import java.util.List;import java.util.Map; import javax.jws. ...
- mongdb创建自增主键(primary key)的相关讨论 - Jason.Zhi
根据mongodb官方文档介绍,如果在插入(insert)操作时,没有指定主键id,那么它会自动给插入行自动附上一个主键id.看起来不错,但是详细看看,就会发现这个id值有点复杂. 如下图: mong ...