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 ...
随机推荐
- 包装类-Character
1,isDigit();是否是数字 char c = '1'; boolean bool = Character.isDigit(c); System.out.println(bool);//true ...
- 企业网站DDOS防护解决方案
随着网络的普及,越来越多的企业开始了上网之路,由于网络安全知识的欠缺,很多企业以为做一个网站就 等于 网络化了,于是狠花血本请专业网络公司制作出各种漂亮的网页.但做完才发现,网络上的各种漏洞的DDOS ...
- [讲座]【项目收集】“清流资本”互联网金融沙龙——颠覆者的创新与机会
[项目收集]"清流资本"互联网金融沙龙--颠覆者的创新与机会 2014年4月19日 14:00 - 2014年4月19日 17:00 北京海淀北京海淀区海淀图书城南侧3W咖啡 限额 ...
- 怎样为EXCEL2010添加下拉列表
注意,下面是Excel2010的步骤和截图,其他版本的Excel类似. 首先用鼠标左键点击你要添加下拉列表的单元格. 如果你只想部分区域有下拉列表,也可以选择部分区域. 下面图片是选择的整个列都是 ...
- 【转】Linux mount/unmount命令
转自:http://www.cnblogs.com/xd502djj/p/3809375.html 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有:-a 安装在/etc/fs ...
- vector.resize 与 vector.reserve的区别 .xml
pre{ line-height:1; color:#9f1d66; background-color:#a0ffc0; font-size:16px;}.sysFunc{color:#5d57ff; ...
- 动软Model 模板 生成可空类型字段
动软代码 生成可空类型 <#@ template language="c#" HostSpecific="True" #> <#@ outpu ...
- 批量还原数据库 SQL Server 2008
1.如果你够懒,不想一步一步点路径,一步一步选择 2.如果你连单个备份数据库的存储过程都不想多执行,一般每还原一个需要修改数据库名 下面的脚本适合你: /*********************** ...
- Chapter15:派生类
在C++语言中,基类将类型相关的函数与派生类不做改变直接继承的函数区别对待,对于某些函数,基类希望它的派生类各自定义适合自身的版本,此时基类就将这些函数声明为虚函数. 派生类必须将其继承而来的成员函数 ...
- 在Chrome Console中加载jQuery
var jq = document.createElement('script'); jq.src = "//ajax.googleapis.com/ajax/libs/jquery/1/j ...