cocos2dx中 curl
来源:互联网 发布:java socket服务端程序 编辑:程序博客网 时间:2024/05/22 13:01
Cocos2d-x中将curl做为第三方的库加入了进来,它被放在cocos2dx\platform\third_party\win32的curl目录下。
在TestCpp有这样一个演示CurlTest。它简单的应用Curl来访问了一下HTTP服务器。我们来学习一下,打开TestCpp工程下的CurlTest目录。这里有两个文件CurlTest.h/cpp。我们先看一下CurlTest.h:
- //演示所用的层。
- class CurlTest : public CCLayer
- {
- public:
- //构造
- CurlTest();
- //析构
- ~CurlTest();
- //当触屏结束时调用
- virtual void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);
- private:
- //文字标签
- cocos2d::CCLabelTTF* m_pLabel;
- };
- //演示所用的场景
- class CurlTestScene : public TestScene
- {
- public:
- //运行当前场景时调用的函数。
- virtual void runThisTest();
- };
其对应的CPP:
- //加入相应的头文件。
- #include "CurlTest.h"
- #include "stdio.h"
- #include "stdlib.h"
- //这里加入了curl库的头文件。
- #include "curl/curl.h"
- //构造函数。
- CurlTest::CurlTest()
- {
- //取得屏幕大小。
- CCSize s = CCDirector::sharedDirector()->getWinSize();
- //创建一个文字标签。
- CCLabelTTF* label = CCLabelTTF::create("Curl Test", "Arial", 28);
- //将标签放入到当前层中。
- addChild(label, 0);
- //设置位置
- label->setPosition( ccp(s.width/2, s.height-50) );
- //开启触屏
- setTouchEnabled(true);
- // 创建用于显示标题的文字标签。
- m_pLabel = CCLabelTTF::create("Touch the screen to connect", "Arial", 22);
- //设置标签居中显示。
- m_pLabel->setPosition(ccp(s.width / 2, s.height / 2));
- //将标签放入到当前层中。
- addChild(m_pLabel, 0);
- //占用它,对其引用计数器加一。
- m_pLabel->retain();
- }
- // 当触屏结束时调用的函数。
- void CurlTest::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)
- {
- //本演示关于CURL使用的语句都放在这里了。
- //首先,使用CURL必须要创建一个CULR指针,它是CURL的全局句柄。
- CURL *curl;
- //这里定义一个CURL库中API的返回值,用于取得API调用的结果。
- CURLcode res;
- //字符数组,用于存储返回值。
- char buffer[10];
- //第一步:初始化CURL,取得初始化成功后的CURL指针。
- curl = curl_easy_init();
- if (curl)
- {
- //第二步,设定我们用此CURL指针来完成的动作。参数一为CURL指针,参数二为相应的动作类型枚举,这个枚举值在curl.h中定义,比如本例中的CURLOPT_URL,定义为CINIT(URL, OBJECTPOINT, 2),即联接一个网站的HTTP服务。参数三为动作对应的数据参数,这里是网站的URL地址。
- curl_easy_setopt(curl, CURLOPT_URL, "www.baidu.com");
- //第三步,执行上面设定的动作处理。返回结果放在res中。
- res = curl_easy_perform(curl);
- //最后一步,清除CURL指针,结束对CURL库的使用。
- curl_easy_cleanup(curl);
- //如果动作处理成功,则显示联结成功,但没有开始接收任何数据。
- if (res == 0)
- {
- m_pLabel->setString("0 response");
- }
- else
- {
- //如果动作处理失败,打印错误码。
- sprintf(buffer,"code: %i",res);
- m_pLabel->setString(buffer);
- }
- }
- else
- {
- //如果初始化失败,显示没有CURL
- m_pLabel->setString("no curl");
- }
- }
- //析构函数。
- CurlTest::~CurlTest()
- {
- //对占用的标题文本标签计数器减一。不再继续占用以使它能够正常被释放。
- m_pLabel->release();
- }
- //运行当前演示场景调用的函数。
- void CurlTestScene::runThisTest()
- {
- //创建一个演示用的层。
- CCLayer* pLayer = new CurlTest();
- addChild(pLayer);
- //运行当前场景。
- CCDirector::sharedDirector()->replaceScene(this);
- pLayer->release();
- }
我们运行起来,为了更好的显示动作,我打开HTTP Analyzer 来进行消息的捕捉,当我点击屏幕后,HTTP Analyzer会捕捉到相应的HTTP访问记录。如图:
可以看到,本程序向www.baidu.com网站发送了一条GET消息。这只是一个简单的连接过程演示,它完成的很棒。现在我们来点好玩的,比如我想把取得的网页下载下来该如何做呢?
CURL中提供了相应的动作类型来获取数据和写数据到文件。首先我们要先创建一个文件指针,然后通过CURL的动作设置函数来指定用于写文件的文件指针,然后我们创建一个写数据的函数并设置为CURL写数据的回调函数。
- //定义的写数据的回调函数。
- size_t write_callback(void *ptr, size_t size, size_t nmemb, FILE *stream)
- {
- size_t written = fwrite(ptr, size, nmemb, (FILE *)stream);
- return written;
- }
- //修改触屏结束的函数处理。
- void CurlTest::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)
- {
- CURL *curl;
- CURLcode res;
- char buffer[10];
- curl = curl_easy_init();
- if (curl)
- {
- //创建写入的文件。
- FILE *outfile;
- outfile = fopen("C:\\baidu.html", "wb");
- curl_easy_setopt(curl, CURLOPT_URL, "www.baidu.com");
- if(outfile)
- {
- //指定写入的文件指针。
- curl_easy_setopt(curl, CURLOPT_FILE, outfile);
- }
- //设置写数据的回调函数。
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
- res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
- //关闭文件
- fclose(outfile);
- if (res == 0)
- {
- m_pLabel->setString("0 response");
- }
- else
- {
- sprintf(buffer,"code: %i",res);
- m_pLabel->setString(buffer);
- }
- }
- else
- {
- m_pLabel->setString("no curl");
- }
- }
运行后,我们点击触屏,这里可以发现在C盘下生成一个baidu.html,点开后会是下面的样子:
是不是很有趣呢?CURL更详细的使用方法和各种动作介绍,可以到官网下载Curl的allexamples.zip来研究。里面有很多实例,同时也欢迎到www.game2z.com来与我一起讨论。下课!
- cocos2dx中 curl
- cocos2dx之curl下载
- cocos2dx 使用curl
- cocos2dx 3.3 curl配置
- cocos2dx网络传输之CURL
- 【Cocos2dx】HTTP Post 上传文件(curl库)
- php中curl函数
- PHP中使用CURL
- PHP中使用CURL
- php中curl
- php中curl封装
- PHP中使用CURL
- cocos2dx 网络编程(CCHttpRequest和CURL两个方式)
- cocos2dx 网络编程(CCHttpRequest和CURL两个方式)
- cocos2dx学习笔记(CCHttpRequest和CURL两个方式)
- cocos2dx 网络编程(CCHttpRequest和CURL两个方式)
- cocos2dx 网络编程(CCHttpRequest和CURL两个方式)
- cocos2dx 3.2 Http网络连接,curl 库的介绍
- IOS系统照相机的调用
- owb基本概念之Workspaces、Repository和Control Center Service
- linux 内核源代码目录结构
- 解决linux系统不识别设备、手机问题方法
- Java解析XML的四种方法
- cocos2dx中 curl
- 如何快速正确的安装 Ruby, Rails 运行环境
- UINavigationBar-使用总结
- 多线程
- JS KB转MB 并保留两位小数 四舍五入函数
- java多态机制分析
- 书——我的向导
- UNIX的ar命令
- Shell脚本显示执行过的命令