cocos2dx Http网络编程

转自:http://blog.csdn.net/wangbin_jxust/article/details/9632771http://blog.csdn.net/wangbin_jxust/article/details/9707873

联网游戏开发中,经常遇到http编程,接下来就分三次对cocos2dx的网络编程进阶

本博文中先介绍建立基本的http通信并得到返回信息

1.创建cocos2dx工程。

2.项目引用外部库。

如果要使用cocos2dx的CCHttpClient来进行网络访问,则需要引入cocos2dx的相关库,详细步骤如下:

右键单击项目->属性->c/c++->常规,在右边的附件包含目录中添加cocos2dx的extensions目录对应的路径。

然后,右键单击项目->属性->链接器->输入,在右边的附件依赖项中添加libcurl_imp.lib和libExtensions.lib两个库,用分号隔开。

如果不引入extensions文件夹,会出现找不到CCHttpClient的错误;

如果不引入libcurl_imp.lib和libExtensions.lib两个库,编译项目时也会出现报错。

另外注意引入头文件:

#include "cocos-ext.h"  

3.添加下载按钮和回调函数。

添加下载按钮:

CCMenuItemImage *pDownloadItem = CCMenuItemImage::create(
            "bt_blue_light.png",
            "bt_blue_light.png",
            this,
            menu_selector(HelloWorld::menuDownloadCallback)
        );
        CC_BREAK_IF(!pDownloadItem);
        CCSize pWinSize = CCDirector::sharedDirector()->getWinSize();

        CCMenu* pDownloadMenu = CCMenu::create(pDownloadItem, NULL);
        pDownloadMenu->setPosition(ccp(50  ,50));
        CC_BREAK_IF(! pDownloadMenu);
        this->addChild(pDownloadMenu, 1);

添加按钮的回调函数:

void HelloWorld::menuDownloadCallback(CCObject* pSender)
{
    cocos2d::extension::CCHttpRequest* request = new cocos2d::extension::CCHttpRequest();
    request->setUrl("http://www.oschina.net/action/api/news_list");
    request->setRequestType(cocos2d::extension::CCHttpRequest::kHttpPost);
    std::vector<std::string> headers;
    headers.push_back("Content-Type: application/json; charset=utf-8");
    request->setHeaders(headers);
    const char* postData = "catalog=2&pageIndex=1&pageSize=5";
    request->setRequestData(postData ,strlen(postData));
    request->setResponseCallback(this, callfuncND_selector(HelloWorld::onHttpRequestCompleted));
    request->setTag("Post_My_Data");
    cocos2d::extension::CCHttpClient::getInstance()->send(request);
    request->release();
}

按钮的回调函数里向服务器发起http请求了,request->setResponseCallback(this, callfuncND_selector(HelloWorld::onHttpRequestCompleted))一行代码,向请求结束时添加了onHttpRequestCompleted回调函数

4.为http request 结束增加回调函数并读取网络数据

void HelloWorld::onHttpRequestCompleted(cocos2d::CCNode *sender ,void *data)
{
    AllocConsole();
    freopen("CONIN$", "r", stdin);
    freopen("CONOUT$", "w", stdout);
    freopen("CONOUT$", "w", stderr);
    cocos2d::extension::CCHttpResponse *response = (cocos2d::extension::CCHttpResponse*)data;
     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());
     }
     std::vector<char> *buffer = response->getResponseData();
     printf("Http response,dump data:");
     std::string result = "";
     for (unsigned int i = 0; i < buffer->size(); i ++)
     {
        printf("%c" ,(*buffer)[i]);
     }
}

debug时就能看到reponse中服务器返回的数据了。

打印到窗体中:

转自:http://blog.csdn.net/sakana87320/article/details/8595242

概述

使用CCHttpClient一般有6步:

  1. 创建CCHttpRequest实例。
  2. 设置Url和请求类型。
  3. 使用CCHttpClient向Url发出请求(连接Url)。
  4. 读取响应。
  5. 释放连接。
  6. 响应处理。

如何使用

获取CCHttpRequest实例

使用一个无参构造方法创建一个CCHttpRequest的实例。CCHttpRequest无参构造方法可以获取一个默认设置的CCHttpRequest实例,该实例可以满足大多数需求。

cocos2d::extension::CCHttpRequest* request = new cocos2d::extension::CCHttpRequest();

设置Url

request->setUrl("blog.csdn.net/sakana87320/article/details/8595242");

设置GET请求

//设置为GET请求:kHttpGet
request->setRequestType(cocos2d::extension::CCHttpRequest::kHttpGet);
//设置处理响应回调函数
request->setResponseCallback(this, callfuncND_selector(HttpClientTest::onHttpRequestCompleted));
request->setTag("GET test");

设置POST请求

//设置为POST请求:kHttpPost
request->setRequestType(cocos2d::extension::CCHttpRequest::kHttpPost);
//设置处理响应回调函数
request->setResponseCallback(this, callfuncND_selector(HttpClientTest::onHttpRequestCompleted));
request->setTag("POST test");

发送请求

cocos2d::extension::CCHttpClient::getInstance()->send(request);

处理返回数据(响应回调函数)

void HttpClientTest::onHttpRequestCompleted(cocos2d::CCNode *sender, void *data)
{
    CCHttpResponse *response = (CCHttpResponse*)data;
    if (!response)
    {
        return;
    }
    // 你可以使用: response->request->reqType获取请求类型
    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());
    m_labelStatusCode->setString(statusString);
    CCLog("response code: %d", statusCode);
    if (!response->isSucceed())
    {
    //访问失败获取错误信息
        CCLog("response failed");
        CCLog("error buffer: %s", response->getErrorBuffer());
        return;
    }
    // 获取返回数据。
    std::vector<char> *buffer = response->getResponseData();
    printf("Http Test, dump data: ");
    for (unsigned int i = 0; i < buffer->size(); i++)
    {
        printf("%c", (*buffer)[i]);
    }
    printf("\n");
}

释放连接

request->release();

注意

Android平台下不要忘了添加访问网络的权限。

cocos2dx Http网络编程

时间: 2024-11-04 05:17:25

cocos2dx Http网络编程的相关文章

cocos2d-x网络编程 连接php服务器笔记1

学习cocos2d-x网络编程是一个非常尴尬的问题,因为熟悉cocos2d-x的学习者基本在游戏开发一块属于客户端编程,想自学网络编程必不可少的牵扯到服务器这块.但是问题是,谁会呢?离开服务器,那搞网络编程无疑就是海市蜃楼镜花水月.官网示例虽然有http短连接和socket长连接的例子但反正我看了之后不知所以,不明白怎么把它用在实际问题中.网上教程也大都是泛泛而谈,不是一些人尽皆知的大道理就是部分不能运行的源码,根本就没有从零教你怎么实现的文章.手游服务器用的技术我们不大可能很了解,据说长连接的

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

本篇文章主要内容:jsoncpp的使用,Cocos2dx网络编程,聚合数据星座运势接口使用. 1.jsoncpp使用: jsoncpp的生成请参考博客:Jsoncpp使用详解以及链接问题解决 2.聚合数据星座运势接口使用: 我们先登上聚合数据官网,申请相关的数据后,就可以得到APPKEY等信息,调试如下: 3.Cocos2dx网络编程:源码下载请点击(源码中包括jsoncpp文件) #include "HelloWorldScene.h" #include "CocoStud

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

学习cocos2d-x和cocos creator的圈子:cocos2d-x:436689827    cocos creator:124727696 本篇文章主要内容:jsoncpp的使用,Cocos2dx网络编程,聚合数据星座运势接口使用. 1.jsoncpp使用: jsoncpp的生成请參考博客:Jsoncpp使用具体解释以及链接问题解决 2.聚合数据星座运势接口使用: 我们先登上聚合数据官网.申请相关的数据后,就能够得到APPKEY等信息,调试例如以下: 3.Cocos2dx网络编程:源

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(){ //网络异步连接方法 cocos

cocos2d-x网络编程 连接php服务器笔记4

VS工程部分----网络编程 本节会把最终实现代码和资源放在文章最未提供各位下载学习. 本节我们开始重头戏联网功能的开发,我用的是cocos2d-x绑定的curl库,这个curl据说很火,虽然我本人了解的不多只晓得基本用法,让大家见笑了.好了想用这个库还是要在工程里设置下的,如开头要包含头文件 #include "curl/curl.h" (官方写法) 这样写需要工程属性 -> 链接器->附加库目录里加上curl路径,假如你跟我一样觉不明所以干脆写全:#include &q

cocos2d-x网络编程

在这里我整理了以往自已用的一些关于HTTP和Socket编程资料,当然也有一些自已对网络编程的理解 首先说说HTTP与Socket概念性的一些认识: Socket通常称为“套接字”,用于描述IP地址和端口. 套接字类型分为: 1>,流式套接字:提供面向连接,可靠的数据传输服务,数据无差错,无重复的发送,且按顺序接收,基于TCP协议 2>,数据报式套接字:提供无连接服务,数据以独立形式发关,不提供无错保证,接必顺序混乱,基于UDP协议 Socket是对TCP/IP协议的封装和应用,它本身并不是协

C#网络编程技术FastSocket实战项目演练

一.FastSocket课程介绍 .NET框架虽然微软提供了socket通信的类库,但是还有很多事情要自己处理,比如TCP协议需要处理分包.组包.粘包.维护连接列表等,UDP协议需要处理丢包.乱序,而且对于多连接并发,还要自己处理多线程等等.本期分享课程阿笨给大家带来的是来源于github开源Socket通信中间件:FastSocket,目的就是把大家从繁琐的网络编程技术中彻底地解放和释放出来. 阿笨只想安安静静的学习下网络编程技术Socket后,将学习的成果直接灵活的运用到自己的实际项目中去.

网络编程 -- RPC实现原理 -- RPC -- 迭代版本V1 -- 本地方法调用

网络编程 -- RPC实现原理 -- 目录 啦啦啦 V2--RPC -- 本地方法调用:不通过网络 入门 1. RPCObjectProxy rpcObjectProxy = new RPCObjectProxy(new LocalRPCClient()); : 绑定目标对象 2. IUserService userService = (IUserService) rpcObjectProxy.create(IUserService.class); :返回代理类 3. List<User> u

C#网络程序设计(1)网络编程常识与C#常用特性

    网络程序设计能够帮我们了解联网应用的底层通信原理!     (1)网络编程常识: 1)什么是网络编程 只有主要实现进程(线程)相互通信和基本的网络应用原理性(协议)功能的程序,才能算是真正的网络编程. 2)网络编程的层次 现实中的互联网是按照"TCP/IP分层协议栈"的体系结构构建的,因此程序员必须搞清楚自己要做的是哪个层次上的编程工作. TCP/IP协议体系的实现情况: 其中,网络接口层已经被大多数计算机生产厂家集成在了主板上,也就是经常所说的网卡(NIC).windows操