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 ...
随机推荐
- ubuntu 安装AMP环境的笔记 Prefork方式与fast-cgi方法
具体步骤如下: 系统:ubuntu 8.04 的发行版本 AMP with Prefork(mod-php5) 一.安装APACHE2 # sudo apt-get install ...
- PubSub的一种实现
今天在浏览JavaScript事件时,复习了下Dean Edward大神的addEvent.突然觉得可以基于他的思路实现一个结构更好的PubSub. 思路也很简单,就是要维护一个类似如下的一个仓库结构 ...
- MSSQL 查询分组前N条记录
sql语句中,查询分组中前n条记录的sql语句如下 第一种方法 select * from consultingfeebill awhere n>(select count(*) from co ...
- Quartz.net 2.0的使用说明
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于WinForm和ASP.NET应用中.它提供了巨大的灵活性而不牺牲 ...
- SqlServer 列的增加和删除
有些时候我们需要删除或增加数据库中有数据中表的列.总结一下列的删除和增加. 1. 删除列 当表中存在数据时,删除列后,数据也会被删除. sql语句: alter table 表名 drop colum ...
- Heilmeier's criteria
介绍个Criteria:Heilmeier's criteria 在Alex Smola 的 SML: Scalable Machine Learning 课程网页上看到的,写的非常好. Heilm ...
- linq性能剖析
Orcas(VS2008&Framework3.5)给我们带来了很多令人兴奋的新特性,尤其是LINQ的引进,可以说方便了一大批开发 人员和框架设计人员.过去,当我们使用O/RMapping的一 ...
- 编写服务说明.thrift文件
1.数据类型 基本类型: bool:布尔值,true 或 false,对应 Java 的 boolean byte:8 位有符号整数,对应 Java 的 byte i16:16 位有符号整数,对应 J ...
- Windows平台分布式架构-负载均衡(高并发)
缘由 单纯想在winodows平台部署分布式程序,微软在IIS扩展的介绍中有涉及到Application Request Router + Web Farm + Url Rewriter可以实现分布式 ...
- [转]天龙八部的BillingServer
从字面上看,Billing是计费的,应该处理玩家在线时间或者包月之类.但是天龙八部是免费游戏,不需要算时间来计费.从代码中看,BillingServer也比较简单,它有一个连接到Web服务器,并监听一 ...