您的位置:首页 > 理论基础 > 计算机网络

Cocos2d-x笔记(四)CCHttpCleint网络请求

2013-10-21 10:17 916 查看
网络传输方式常用的有socket、Http两种方式可以使用。
使用socket需要处理很多细节,因此需要在socket传输之上再根据需求包装一层,以降低使用复杂度。
Http则隐藏了细节,采用主从式、非对等的的传输方式。Cocos2d-x推荐使用的网络传输库是CURL,它支持FTP、HTTP、LDAP等传输方式,还可以跨平台使用。
CURL提供了阻塞传输(curl_easy_)和(非阻塞传输)curl_mutl_两种方式。CCHttpClient对CURL进行封装,采用http的方式传输数据。
1.使用HttpClient需要导入头文件
#include "cocos-ext.h"

2.编写网络请求的代码
CCHttpRequest* request =  new CCHttpRequest();
request->setUrl("www.baidu.com");
request->setRequestType(CCHttpRequest::kHttpGet);
request->setTag("hettp test");
request->setResponseCallback(this,httpresponse_selector(HelloWorld::onHttpComplete));
CCHttpClient::getInstance()->send(request);


RequestType共有五种模式:kHttpGet、kHttpPost、kHttpPut、kHttpDelete、kHttpUnkown。kHttpUnkown是默认的请求模式。
Tag用于标示此次网络请求。
onHttpComplete是一个回调函数,用于返回的数据。
3.编写网络回调函数
void HelloWorld::onHttpComplete(CCHttpClient* sender,CCHttpResponse* response)
{
if (!response)
{
return;
}

if (0 != strlen(response->getHttpRequest()->getTag()))
{
CCLog("%s completed", response->getHttpRequest()->getTag());
}

int statusCode = response->getResponseCode();
char statusString[64] = {};
sprintf(statusString, "HTTP Status Code: %d, tag = %s", statusCode, response->getHttpRequest()->getTag());
CCLog("response code: %d", statusCode);

if (!response->isSucceed())
{
CCLog("response failed");
CCLog("error buffer:%s", response->getErrorBuffer());
return;
}

std::vector<char> *buffer = response->getResponseData();
std::string str;
for (unsigned int i = 0; i < buffer->size(); i++)
{
char a = (*buffer)[i];
str.append(1,a);
}
CCLog(" buffer:%s",str.c_str());
}

CCHttpResponse封装了网络请求的结果,所以回调函数中主要是取出CCHttpResponse中的数据
 
PS:编译到android手机上时,需要添加网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息