cocos2d-x中使用Http
一、如何使用
//发送接口
void CmdHelper::postRequest(const char* cmdTag, const char* url, const char* postData, size_t postDataLengt)
{
CCHttpRequest* request = new CCHttpRequest();
request->setTag(cmdTag);
request->setUrl(url);
request->setResponseCallback(this, httpresponse_selector(CmdHelper::onRequestRsp)); //set request type: get/post/put/delete
request->setRequestType(CCHttpRequest::kHttpPost); //set header
std::vector<std::string> headers;
headers.push_back("Content-Type: application/json; charset=utf-8");
request->setHeaders(headers); //set body data, POST only
request->setRequestData(postData, postDataLengt); //set time out
CCHttpClient::getInstance()->setTimeoutForConnect(TIMEOUT_CONNECT);
CCHttpClient::getInstance()->setTimeoutForRead(TIMEOUT_READ);
CCHttpClient::getInstance()->send(request);
// don't forget to release it, pair to new
request->release();
} #define CMD_DOWNLOAD "CMD_DOWNLOAD"
#define URL_DOWNLOAD "http://192.168.2.122:9001/star/downsolution"
std::string data = "";
//发送post请求时,调用如下接口即可
postRequest(CMD_DOWNLOAD, URL_DOWNLOAD, data.c_str(), data.length()); //接收回调
void CmdHelper::onRequestRsp(CCHttpClient* client, CCHttpResponse* response)
{
if (!response)
{
CCLOG("ERROR: %s ---> null response", __FUNCTION__);
return;
} std::string tag = response->getHttpRequest()->getTag();
int statusCode = response->getResponseCode();
CCLOG("%s ---> response code: %d, tag = %s", __FUNCTION__, statusCode, tag.c_str()); std::string dataBody;
if (!response->isSucceed())
{
CCLOG("response failed");
CCLOG("error buffer: %s", response->getErrorBuffer());
//this->setLastNetworkError(response->getErrorBuffer());
}
else
{
// dump data
std::vector<char> *buffer = response->getResponseData();
dataBody.assign(buffer->begin(), buffer->end());
//CCLOG("%s", dataBody.c_str());
} //dispatch
if (CMD_DOWNLOAD == tag)
{
this->onDownloadTaskSolutionRsp(dataBody.c_str(), dataBody.size());
}
else
{
CCLOG("%s ---> error branch, cmd tag = %d", __FUNCTION__, tag.c_str());
}
}
二、遇到的坑
1. 注意传输的编码格式
如上示例中,我们使用的utf-8编码,但是在http传输二进制数据的时候,服务器收到的数据变大了,所以要么改传输的编码格式,要么把本地要传输的二进制数据转码(比如我们用的base64)。
cocos2d-x中使用Http的更多相关文章
- 如何在cocos2d项目中enable ARC
如何在cocos2d项目中enable ARC 基本思想就是不支持ARC的代码用和支持ARC的分开,通过xcode中设置编译选项,让支持和不支持ARC的代码共存. cocos2d是ios app开发中 ...
- 如何在Cocos2D游戏中实现A*寻路算法(六)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(八)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(七)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(五)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(四)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(三)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 如何在Cocos2D游戏中实现A*寻路算法(二)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- Cocos2D场景中对象引用为nil时的判断
如果该对象在SpriteBuilder中属性中设置了name,则检查是否 [self.scene getChildByName:@"theNameOfTheNode" recurs ...
随机推荐
- storm的安装配置
一.安装Zookeeper 1.设置.profile文件: export ZOOKEEPER_HOME=/home/hadoop/streamdata/zookeeper-3.4.5-cdh4.5.0 ...
- 搜狐云景paas平台实践之路
前言: 搜狐云景作为搜狐的paas平台,在2014年5月22日的云计算大会上正式发布了公测.初测,注册用户必须先申请邀请码参与公测会赠送用户100元电子券,经过实名认证之后会再赠送100电子券,目测可 ...
- leetcode@ [310] Minimum Height Trees
For a undirected graph with tree characteristics, we can choose any node as the root. The result gra ...
- NodeJs 开源
iwebpp.io - 运行P2P Node.js web 服务,穿透防火墙,NAT https://github.com/InstantWebP2P/iwebpp.io pm 是一个轻量级的Node ...
- 删除ArrayList中的元素
菜鸡重大发现:删除arraylist时,每删除一个元素后面的元素会自动填充 public static void main(String[] args) { List<String> li ...
- linux 下终端复用软件推荐——tmux
使用过些linux终端,比如Tilda.Terminator. 之前最经常用的是Terminator,其可以上下左右分屏,比较方便,但其有个缺点是经常无故崩溃. 后来遇到Tmux,根据网上的设置配置了 ...
- ManagementFactory (简介)
Java Management Extensions (JMX) is a Java technology that supplies tools for managing and monitorin ...
- map的正确删除方式
遍历删除map元素的正确方式是 for(itor = maptemplate.begin; itor != maptemplate.end(); ) { if(neederase) ...
- c/c++字符串处理大集合
rember this strncpy(a,b,5); a[5]='\0'; char a[10]; memset(a,'#',sizeof(a)); a[10]='\0'; 刚开始学C/C++时,一 ...
- Velocity中#set指令
引用可以让模板设计者生成动态内容,而指令允许设计者真正的负责页面的展现和内容. 指令是以#开头,后面紧跟一个关键字,比如if,else,foreach等.而这个关键字,是可以被放在{}中间的.这是规范 ...