【Cocos2d-x】Cocos2d-X网络编程-HttpRequest/HttpClient/HttpResponse

Cocos2d-x封装了3个类来处理HTTP请求:
HttpRequest,HttpClient和HttpResponse.

使用HttpRequest,HttpClient和HttpResponse这3个类进行Http进行请求时,需要遵循一定流程

请求过程:
1.创建HttpRequest的实例。
2.设置请求方式,Get、Post等。(千万不要以为只有get和post方式哦,这是一般新手以为的,只是其他请求方式我们平时用到的很少)
3.设置请求地址和发送的数据(如果没有发送的数据,可不设置发送数据)。
4.设置响应回调函数,在回调函数中处理获取的数据。
5.创建HttpClient实例,发送请求。
6.释放请求连接。

使用Cocos2d封装的HttpRequest设置请求信息

HttpRequest:
是一种数据类型,它提供了一些方法用来定义或获取HTTP请求的参数,
常用方法包括下面几种:
设置请求连接
void setUrl(const char * url);
设置请求类型
void setRequestType(Type type);

这里的Type是Cocos2d-x定义的一个枚举类型,包括5种类型。
源码:

class CC_DLL HttpRequest : public Ref
{
public:
    /**
     * The HttpRequest type enum used in the HttpRequest::setRequestType.
     */
    enum class Type
    {
        GET,
        POST,
        PUT,
        DELETE,
        UNKNOWN,
    };
...
}

设置回调函数:
void setResponseCallback(Ref* pTarget,SEL_HttpResponse pSelector);

设置请求的数据,参数buffer是提交的数据,len是请求数据的长度(使用发送数据的实际长度):
void setRequestData(const char* buffer,unsigned int len);

头文件和命名空间:

#include "network/HttpRequest.h" //1
using namespace cocos2d::network; //2

完整的Request对象创建

    auto request = new HttpRequest();
    //设置请求网址
    request->setUrl("请填写你需要请求的网址");
    //设置请求类型
    request->setRequestType(HttpRequest::Type::GET);
    //设置请求的数据
    char data[50] = "data";
    request->setRequestData(data,strlen(data));

使用Cocos2d封装的HttpClient发送请求

HttpClient:
用来控制请求相关的参数,比如发送请求,设置请求超时时间。
它使用单例模型。 这一模式的目的是使得类的一个对象成为系统中的唯一实例。
cocos2d中多处用到这一模型。
比如Director对象,创建Director::getInstance().获取的都是同一个对象,方便统一管理
又比如,音频处理对象: SimpleAudioEngine::getInstance();

常用方法
发送请求:
send(HttpRequest* request)
设置连接超时时间:
setTimeoutForConnect(int value)

#include "network/HttpClient.h"
using namespace cocos2d::network; //2
    //创建HttpClient对象
    auto client = HttpClient::getInstance();//getInstance静态成员函数-单例模式模型
    client->setTimeoutForConnect(60);//当客户端向服务端发送请求超过这个时间,就会返回一个错误信息
    client->setTimeoutForRead(100);//接收数据的读取时间
    client->send(request);

使用Cocos2d封装的HttpResponse处理返回的结果

HttpResponse:
包含服务器返回的数据等信息。使用HttpResponse提供的方法可以获取这些数据。
常用方法:
std::vector * getResponseData();
获取请求返回的数据 -返回的是一个char型的数组

getResponseState
获取服务器返回的状态,返回值是一个整数,200表示请求成功,400表示服务器错误,404表示服务器上找不到相应的文件。

issucced(),用来判断是否返回成功。

//实现回调函数
void HelloWorld::complete(HttpClient *client, HttpResponse *response){
    //使用HttpResponse类的相关函数,获取状态和数据
    log("response code is:%d",response->getResponseCode());//获取请求返回的状态码
    if (response->isSucceed()){//判断返回是否成功  成功就返回true
        std::vector<char> * data = response->getResponseData();
        log("response data is:");
        //for (int i = 0; i < data->size(); i++){
        //  log("%c",(*data)[i]);
        //  //因为data是一个指针,所以需要取内容操作符,(*data)这样获取的就是数组的首地址,然后再加上角标
        //}
    }

    else{
        log("error msg is:%s", response->getErrorBuffer()); // getErrorBuffer-会返回请求数据错误的信息
    }

}

完整源代码下载地址:

GITHUB源码下载地址:点我进行下载

本文章由[谙忆]编写, 所有权利保留。
欢迎转载,分享是进步的源泉。

转载请注明出处:http://chenhaoxiang.cn

本文源自人生之旅_谙忆的博客

时间: 2024-09-19 13:51:25

【Cocos2d-x】Cocos2d-X网络编程-HttpRequest/HttpClient/HttpResponse的相关文章

【Android开发】网络编程及Internet应用-使用HttpClient访问网络

    前面介绍了使用java.net包中的HttpURLConnection类来访问网络,在一般情况下,如果只需要到某个简单页面提交请求并获取服务器的响应,完全可以使用该技术来实现.不过,对于比较复杂的联网操作,使用HttpURLConnection类就不一定能满足要求,这时,可以使用Apache组织提供的HttpClient项目来实现.在Android中,已经成功的集成了HttpClient,所以可以直接在Android中使用HttpClient来访问网络.     HttpClient实际

JAVA网络编程之模拟表单提交

这一篇博客是对上一篇<JAVA网络编程之获取网络资源>的扩充,这一篇将使用HttpURLConnection来模拟一个表单的提交.在B/S架构的系统中,请求时通过浏览器与服务端进行交互的,提交请求参数时使用form表单进行提交,但是有很多时候,我们需要在程序中直接调用HTTP接口,同时需要传递一些参数,那么这个时候我们就可以通过使用HttpURLConnection来模拟表单的提交过程. 首先,我们可以对请求进行封装 import java.util.ArrayList; import jav

网络编程-客户端发送消息给服务端后,服务端应答无效

问题描述 客户端发送消息给服务端后,服务端应答无效 连接建立了,语言C++.前端是用cocos2d封装好的. 目前是:客户端向服务端send:服务端能接到:服务端向客户端send:客户端能接到. 但是:客户端向服务端send,服务端接到后立即应答向客户端send,客户端就接不到. 代码如下: 客户端:(在一个按钮中触发) gksock->connect_(5500,"127.0.0.1"); struct gksakura { int a; char b[32]; }; stru

Lua下基本的网络编程示例_Lua

 Lua是高度灵活的语言,它往往是在多个平台,包括Web应用程序中使用.成立2004年的Kepler社区提供Lua的Web组件开放源码. 虽然,也有使用Lua已经开发了其他的web框架,我们将主要集中在Kepler社区提供的组件.应用程序和框架     Orbit 是一个lua的MVC Web框架,它是基于WSAPI.     WSAPI是从Lua的Web应用程序抽象的Web主机服务器,是基于许多项目的API.     Xavante是一个Lua的Web服务器,提供了一个WSAPI接口.    

Android开发中网络编程与常见功能优化总结

一般的应用都是从服务器获取数据,然后通过极致的界面风格,将数据清晰,明朗的展现给用户. 那么就可以分为这两块: 1.界面UI   追求极致 2.功能 2.1获取数据:主要是与服务器通信,那么就要涉及到网络编程 : 2.1.1  URlConnection  2.1.2  HttpURLConnection(post get) 2.1.3  Socket 2.1.4  HttpClient(post get) 2.1.5  WebService(自己拼装请求xml 数据,采用开源jar包 ksoa

【Android】Android网络编程概述

Android网络编程概述 原文来自:http://blog.csdn.net/kieven2008/article/details/8210737 首先,应该了解的几个问题: 1)Android平台网络相关API接口  a) java.net.*(标准Java接口)  java.net.*提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及URLConnection/HttpURLConnection对象.设置链接参数.链接

Windows 10 开发 网络编程教程

本教程的主要内容:HttpClient类,Socket通信,WCF通信  HttpClient类  在UWP中可以用来进行网络通信的HttpClient类有两个,System.Net.Http.HttpClient和Windows.Web.Http.HttpClient,两者使用上的差别并不大,但我们优先考虑后者,因为它位于Windows.Foundation.UniversalApiContract程序集中,是本地代码,效率更高.我们主要学习的也是Windows.Web.Http.HttpCl

android 网络编程之网络通信几种方式实例分享

如今,手机应用渗透到各行各业,数量难以计数,其中大多数应用都会使用到网络,与服务器的交互势不可挡,那么android当中访问网络有哪些方式呢? 现在总结了六种方式: (1)针对TCP/IP的Socket.ServerSocket (2)针对UDP的DatagramSocket.DatagramPackage.这里需要注意的是,考虑到Android设备通常是手持终端,IP都是随着上网进行分配的.不是固定的.因此开发也是有一点与普通互联网应用有所差异的. (3)针对直接URL的HttpURLConn

python网络编程之数据传输UDP实例分析

  本文实例讲述了python网络编程之数据传输UDP实现方法.分享给大家供大家参考.具体分析如下: 一.问题: 你觉得网络上像msn,qq之类的工具在多台机器之间互相传输数据神秘吗?你也想玩一下在两台机器之间传数据吗?今天让python告诉我们基本原理吧,当然只是做简单的了解,实际情况复杂的多. 我们今天用python实现一个简单的udp程序. 二.程序实现: 1) 使用模块 (socket)套接字模块: 套接字模块是一个非常简单的基于对象的接口,它提供对低层BSD套接字样式网络的访问 .使用