libcurl使用心得

最新正在写cocos客户端更新的逻辑,研究了一下cocos2d-x自带的Libcurl,以下是自己在使用过程中的心得和遇到的未解问题,希望大家一起讨论一下,欢迎大家指导。

首先,科普一下,Libcurl为一个免费开源的,客户端url传输库,支持FTP,FTPS,TFTP,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP,跨平台,支持Windows,Unix,Linux等,线程安全,支持Ipv6。并且易于使用。

下面是本人重写的简单的下载包的过程:

bool AssetsManagerEx::downLoad()
{
m_iUpdateState = kUpdateStateDownloading;
    // Create a file to save package.

//下载文件的存放位置
    string outFileName = _storagePath + TEMP_PACKAGE_FILE_NAME;

//新建并打来一个文件 以便下载后写入
    FILE *fp = fopen(outFileName.c_str(), "wb");
    if (! fp)
    {
        CCLOG("can not create file %s", outFileName.c_str());
m_iUpdateState = kUpdateStateDownloadError;
        return false;
    }    
    
    fseek(fp,0, SEEK_END);
    s_InitSize = ftell(fp);
    
    // Download pacakge
    CURLcode res;

//设定curl的链接
    curl_easy_setopt(_curl, CURLOPT_URL, _packageUrl.c_str());
    curl_easy_setopt(_curl, CURLOPT_WRITEFUNCTION, downLoadPackage);

//设置将data写入到文件流fp中
    curl_easy_setopt(_curl, CURLOPT_WRITEDATA, fp);

//设为false 下面才能设置进度响应函数
    curl_easy_setopt(_curl, CURLOPT_NOPROGRESS, false);

//进度响应函数,progressFunc显示下载进入或者上传进度
    curl_easy_setopt(_curl, CURLOPT_PROGRESSFUNCTION, progressFunc);

//数据传输的对象
    curl_easy_setopt(_curl, CURLOPT_RESUME_FROM, s_InitSize);
    
    res = curl_easy_perform(_curl);
    curl_easy_cleanup(_curl);
    if (res != 0 && res != CURLE_RANGE_ERROR)
    {
        CCLOG("error when download package");
        fclose(fp);
m_iUpdateState = kUpdateStateDownloadError;
        return false;
    }
    
    CCLOG("succeed downloading package %s", _packageUrl.c_str());
    
    fclose(fp);
m_iUpdateState = kUpdateStateDownloadSuccess;
    return true;
}

cocos2d-x AssetsManager libcurl使用心得相关推荐

  1. 计算机科学精彩帖子收集

    linux源码 LXR 源自"the Linux Cross Referencer",中间的"X"形象地代表了"Cross".与 Sourc ...

  2. Ios热更新,实时代码更新,动态更新,动态库framework

    动态更新,iOS有三种处理方案 1,开源框架reactive native,但是编程语言是js iOS app可以在运行时从服务器拉去最新的js文件到本读,然后执行,因为js是一门动态的脚本语言 所以 ...

  3. android studio ant编译,Android Studio编译cocos2dx项目

    一.所需工具 1.Android studio2.3 2.cocos2dx3.10 3.jdk1.8 4.ndkr9d 5.sdk 6.ant 7.python2.7.14 二.配置环境变量 1.sd ...

  4. 野蛮时代辅助脚本代码 为什么要在线更新资源和文件?

    野蛮时代辅助脚本代码 为什么要在线更新资源和文件? 简单概括,如果你的游戏项目已经在google play 或Apple Store 等平台上架了,那么当你项目需要做一些活动或者修改前端的一些代码等那 ...

  5. linux下c/c++方式访问curl的帮助手册

    转自:http://blog.chinaunix.net/u1/47395/showart_1768832.html 有个业务需求需要通过curl 代理的方式来访问外网 百度了一把,测试可以正常使用. ...

  6. 【步兵 经验篇】断点续传

    [步兵 经验篇]断点续传 By EOS. 虽然 基于cocos写的,但是也可以用于其他地方,核心是curl库,只要引用就可以实现. 既然curl库本身是有断点续传的接口的,不用岂不可惜? 用途 断点续 ...

  7. Cocos2dx+lua打包wp8教程

    研究了2周,终于研究出来,绝对原创,请转载的说明出处,这个内容可能有点长,但是如果你按照教程走,则一定会成功的,下面来说步骤: 一:开发环境和SDK Win8 操作系统:这里在官网上下载企业版或者专业 ...

  8. 如何优化cocos2d程序的内存使用和程序大小:第一部分

    译者: 在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区 ...

  9. libcurl 多线程使用注意事项 - Balder~专栏 - 博客频道 - CSDN.NET

    libcurl 多线程使用注意事项 - Balder~专栏 - 博客频道 - CSDN.NET libcurl 多线程使用注意事项 分类: C/C++学习 2012-05-24 18:48 2843人 ...

最新文章

  1. char(nchar)与varchar(nvarchar)的区别以及选择
  2. 2021-06-06
  3. bat 调用python
  4. 11.05 scrum report
  5. python网络爬虫_Python爬虫实战之网络小说
  6. wordpress拒绝访问_Nginx + Wordpress页面或帖子URL返回拒绝访问
  7. easyui验证:validatebox
  8. 面试容易问的 JavaScript 知识点,你知道几个?
  9. 为apache添加SSL支持
  10. java 端口_java – 如何找到可用的端口?
  11. sitecore系统教程之使用修补程序文件自定义Sitecore配置
  12. 用DVD镜像离线安装Debian的软件包
  13. 从0到1实现VueUI库思路
  14. 【软件】一个简单好用的取色器TakeColor(百度云免费下载链接)
  15. win10配置计算机环境变量,教你win10怎么设置环境变量
  16. 关于安装和使用IAR的出现的一些错误
  17. 网站被黑了不要慌,4招教你如何破解!网站被黑的10大原因
  18. AutoCAD.NET实现CAD截图
  19. PLC振荡电路——控制灯闪烁
  20. 关于NetBios的简单应用

热门文章

  1. object string java_Object类和String类
  2. c语言随机生成1到100随机数_VB之生成随机数
  3. 无限复活服务器,绝地求生无限复活模式怎么玩 无限复活玩法说明介绍
  4. Android Studio安装使用过程中踩到的坑
  5. 巩膜:论文翻译《一种改进的眼角检测算法》An Improved Algorithm for Eye Corner Detection
  6. 解决libstdc++.so.6: version `GLIBCXX_3.4.22' not found
  7. Tensorflow 对抗生成网络GAN 不服就GAN
  8. python编写hadoop代码
  9. matlab 中一些对数组或矩阵的处理
  10. 阿里云的技术创新,不是简单的路线之争