cocos2dx之如何使用HttpClient进行网络通讯

前端之家收集整理的这篇文章主要介绍了cocos2dx之如何使用HttpClient进行网络通讯前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

关于HttpClient的简介

HttpClient的应该用已经十分广泛.HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性.
HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient以可扩展的面向对象的结构实现了Http全部的方法(GET,POST,PUT,DELETE,HEAD,OPTIONS,and TRACE)。

关于HTTP的POST、GET、HEAD、PUT
请求方法是请求一定的Web页面的程序或用于特定的URL。http可选用的请求方法有很多种,这里只列举下列几种:
GET:客户端向服务器请求指定的页面信息,并返回实体主体。
HEAD:只请求页面的首部。
POST:客户端请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
PUT:从客户端向服务器传送的数据取代指定的文档的内容
其中get和post是我们游戏中最常用到的.

如何使用cocos2dx的HttpClient
下面直接进入我们的主题,如何使用cocos2dx的HttpClient,这个其实很简单.寥寥不多的几行代码就搞定了.
首先,加入头文件:

#include "extensions/cocos-ext.h"
#include "network/HttpClient.h”
using namespace cocos2d::network;


使用时的如下:

    HttpRequest* request1 = new HttpRequest();
    request1->setRequestType(HttpRequest::Type::GET);//这里是GET请求
    request1->setUrl("https://httpbin.org/get");
    request1->setResponseCallback(CC_CALLBACK_2(HelloWorld::onHttpRequestCompleted,this));
    HttpClient::getInstance()->send(request1);
    request1->release();
        
    HttpRequest* request2 = new HttpRequest();
    request2->setUrl("http://httpbin.org/post");
    request2->setRequestType(HttpRequest::Type::POST);//这里是POST请求
    request2->setResponseCallback(CC_CALLBACK_2(HelloWorld::onHttpRequestCompleted,this));
    // write the post data
    const char* postData = "visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";
    request2->setRequestData(postData,strlen(postData));
    request2->setTag("POST test1");
    cocos2d::network::HttpClient::getInstance()->send(request2);
    request2->release();

简单滴解析一下,上面用的服务端也是cocos引擎里面官方test中的地址,分别是:

https://httpbin.org/get

http://httpbin.org/post

本文是参考test中C++写的,test中也有lua版本的哦.

其中onHttpRequestCompleted是响应的函数.我这里是参考官方的test写的,只是把数据在log输出.没有进行其他的处理


编辑响应的函数onHttpRequestCompleted(),代码如下

void  HelloWorld::onHttpRequestCompleted(HttpClient*sender,HttpResponse *response)
{
    if (!response)
    {
        return;
    }
    
    // You can get original request type from: response->request->reqType
    if (0 != strlen(response->getHttpRequest()->getTag()))
    {
        log("%s completed",response->getHttpRequest()->getTag());
    }
    
    long statusCode = response->getResponseCode();
    char statusString[64] = {};
    sprintf(statusString,"HTTP Status Code: %ld,tag = %s",statusCode,response->getHttpRequest()->getTag());
//    _labelStatusCode->setString(statusString);
    log("response code: %ld",statusCode);
    
    if (!response->isSucceed())
    {
        log("response Failed");
        log("error buffer: %s",response->getErrorBuffer());
        return;
    }
    
    // dump data
    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");
}


____________________________

相关资料推荐:

http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/httpclient/zh.md cocos2dx官方开发者文档--如何使用HttpClient:

http://www.2cto.com/kf/201404/295863.html cocos2d-x3.0 实现HTTP请求GET、POST

http://www.2cto.com/kf/201409/333393.htmlCocos2d-x3.1 HttpClient封装与使用

http://blog.csdn.net/wangpeng047/article/details/19624529 HttpClient使用详解

http://changfakong.diandian.com/post/2012-02-13/15973956 HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误

猜你在找的Cocos2d-x相关文章