转自: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); 

使用同步连接,联网方法的启动就直接阻塞游戏主进程的运行,直到获取到返回值为止。

curl_easy_setopt::属性
curlopt_url//URL地址值
curlopt_writefunction//将得到的数据传递相应的函数
curlopt_writeddata//将函数传递给相应的第四个参数里
curlopt_header//如果设置为1,可以返回http头的值;如果设置为非0值,则可以把一个头包含在输出中
CURLOPT_TIMEOUT_MS //设置cURL允许执行的最长毫秒数。
curlopt_low_speed_limit//设置一个长整型。控制传送多少字节
curlopt_cookie//传递一个包含httpcookie的头连接
curlopt_flie//传送到输出文件
curlopt_infile//传送过来的输出文件
curlopt_writeheader//输出头部分
curlopt_proxyuserpwd//传递一个形如[username]:[password]格式的字符串去连接http代理
curlopt_postfields//传递一个作为httppost操作的所有数据的字符串
curlopt_referer //在http请求中包含一个referer头的字符串
curlopt_useragent//在http请求中包含一个user-agent 头的字符串
curlpot_ftpport 传递一个包含被ftppost指令使用的IP地址
使用格式curl_easy_setopt( curl, CURLOPT_FOLLOWLOCATION, 1L); //第一个参数实例化的curl,第二个数属性,第三个为属性值

如果,获取的返回值是josn格式,我的博客中有方法非常方便提取指定的值。

cocos2dx 网络编程(CCHttpRequest和CURL两个方式)的更多相关文章

  1. 【独立开发人员er Cocos2d-x实战 013】Cocos2dx 网络编程实战之星座运势

    学习cocos2d-x和cocos creator的圈子:cocos2d-x:436689827    cocos creator:124727696 本篇文章主要内容:jsoncpp的使用,Coco ...

  2. Java 网络编程(二) 两类传输协议:TCP UDP

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951841.html 两类传输协议:TCP,UDP TCP TCP是Transfer C ...

  3. Cocos2d-x 网络编程

    主要介绍内容:Http协议,Socket协议,webSocket协议, Cocos2d-x中的相关类和方法 1 Http协议 HTTP协议也叫超文本传输协议.是互联网广泛使用的通信协议,常用于B/S架 ...

  4. Cocos2d-X网络编程(4) Cocos2d中的网络通信协议——Socket通信

    Socket,俗称网络套接字,本身并不是协议,而是一个调用接口,是对TCP/IP协议的封装和应用,.提供了一系列方法方便开发者进行网络通讯. TCP/IP协议是使用最早的通讯协议,它是传输层协议,主要 ...

  5. (原创)用Receiver和SystemService监听网络状态,注册Receiver的两种方式

    android中网络编程不可避免地要监听网络状态,wifi或者3G以及以太网,并根据当前状态做出相应决策. 在MyReceiver类中的onReceive方法中获得系统服务 ConnectivityM ...

  6. iOS 通过URL网络获取XML数据的两种方式

    转载于:http://blog.csdn.net/crayondeng/article/details/8738768 下面简单介绍如何通过url获取xml的两种方式. 第一种方式相对简单,使用NSD ...

  7. Cocos2d-X网络编程(2) Cocos2d中的网络通信协议——http协议

    HTTP协议也叫超文本传输协议.是互联网广泛使用的通信协议,常用于B/S架构中. HTTP连接使用的是短连接形式,也就是"请求-响应"的方式,不仅在请求时需要先建立连接,而且需要客 ...

  8. Cocos2d-X网络编程(1) 网络基本概念

    网络模型 OSI层模型.TCP/IP的层模型如下所示. TCP/IP各层对应的协议如下所示. 通过初步的了解,我知道: IP协议:对应于网络层,是网络层的协议, TCP协议:对应于传输层,是传输层的协 ...

  9. Cocos2d-X网络编程(5) 使用Rapidjson解析数据

    Json基础及28种c++解析库性能对比 JSON 概念和特点:     JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)     JSON ...

随机推荐

  1. Undefined symbols for architecture armv7

    xcode编译过程中出现如下问题Undefined symbols for architecture armv7:... ld: symbol(s) not found for architectur ...

  2. 实现两个N*N矩阵的乘法,矩阵由一维数组表示

    实现两个N*N矩阵的乘法,矩阵由一维数组表示. 先介绍一下矩阵的加法: void Add(int rows, int cols) { ;i<rows;i++) { ;j<cols;j++) ...

  3. HDU5805 NanoApe Loves Sequence (BestCoder Round #86 B)前后缀预处理

    分析:维护空隙的差,然后预处理前缀最大,后缀最大,扫一遍 #include <cstdio> #include <cstring> #include <cmath> ...

  4. C语言实现strlen

    strlen: #ifndef STRLEN_H #define STRLEN_H #include <stdio.h> // 参考微软的写法 int cat_strlen(const c ...

  5. 了解一下jsp

    本着和大家共同学习jsp的原则,今天谈一谈jsp. 首先,JSP(全称JavaServer Pages)是由Sun Microsystems公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户 ...

  6. _margin和margin的区别

    _margin和margin的区别 _margin和margin的区别 Question: margin:15px 300px 0px 100px; height:72px; width:188px; ...

  7. 10个优质PSD文件资源下载

    很多设计需求并不一定要从头开始设计,你完全可以通过已有的灵感或素材开始设计任务.这个时候你可能需要一些PSD资源作为参考.今天我整理了一些常用的PSD资源供需要的朋友免费下载使用. Web & ...

  8. 【boost】MFC dll中使用boost thread的问题

    项目需要,在MFC dll中使用了boost thread(<boost/thread.hpp>),LoadLibraryEx的时候出现断言错误,去掉thread库引用后断言消失. 百度g ...

  9. 将dataset写入数据库

    最近在将excel中的文件导入到数据库中,用程序进行编写,由于数据量较大所以速度很慢,后来采用了SqlBulkCopy类,解决了速度的问题,我就insert语句,sqldataadapter.upda ...

  10. Azure杂七杂八系列(二) - 如何在Azure上重新配置VM

    我们经常遇到这样的问题,  对于已经建立的VM进行性能提升, 比如需要更好的虚拟机或者需要迁移到其他的虚拟网络 那么我们可以使用以下的方法进行修改. 1. 如图所示, TESTVMXX位于North ...