Cocos2d-x笔记 CCHttpCleint网络请求

来源:互联网 发布:vscode 绿色版 编辑:程序博客网 时间:2024/06/03 06:43

Cocos2d-x笔记 CCHttpCleint网络请求

网络传输方式常用的有socket、Http两种方式可以使用。

使用socket需要处理很多细节,因此需要在socket传输之上再根据需求包装一层,以降低使用复杂度。

Http则隐藏了细节,采用主从式、非对等的的传输方式。Cocos2d-x推荐使用的网络传输库是CURL,它支持FTP、HTTP、LDAP等传输方式,还可以跨平台使用。

CURL提供了阻塞传输(curl_easy_)和(非阻塞传输)curl_mutl_两种方式。CCHttpClient对CURL进行封装,采用http的方式传输数据。

1.使用HttpClient需要导入头文件

1

#include  "cocos-ext.h"

2.编写网络请求的代码

1

2

3

4

5

6

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.编写网络回调函数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

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手机上时,需要添加网络权限

1

<uses-permission  android:name="android.permission.INTERNET"></uses-permission>

 

0 0
原创粉丝点击