现在做项目可能很多时候要负责多个版本,所以共用的部分如果可以只写一份的话就大大减少工作量。比如移动端来说,主流的Android,iOS,WinPhone,如果我们用C/C++把底层通讯全部写好的话,那么移动平台只要负责界面显示就可以了。不需要写逻辑。本篇就简单讲述curl库的基本使用,用它就可以完成一些基于http的相关工作。
方法一:
方法二(从网上下载更新包):
数据写入函数跟之前的getVersionCode差不多 只是向不同的对象写入 用的函数也不一样
进度条响应函数的功能主要是 更新下载的进度 即为 (int)nowDownloaded/totalToDownload*100
当然更新包下载下来,还需要解压,替换等步骤。
方法一:
CURL* curl; CURLcode res; char buffer[10] ={0}; curl = curl_easy_init();//curl初始化 std::string _version; if (curl){ curl_easy_setopt(curl, CURLOPT_URL, "https://raw.github.com/minggo/AssetsManagerTest/master/version"); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);//设为不验证证书 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, getVersionCode);//设置处理数据的函数 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &_version);//数据存储的对象指针 res = curl_easy_perform(curl);//curl链接 curl_easy_cleanup(curl);//清除curl }
static size_t getVersionCode(void *ptr, size_t size, size_t nmemb, void *userdata){ //参数userdata是存放数据的指针 其他三个获取内容 std::string *version = (std::string*)userdata; version->append((char*)ptr, size * nmemb); return (size * nmemb); }
方法二(从网上下载更新包):
string outFileName = _storagePath + TEMP_PACKAGE_FILE_NAME;//下载文件的存放位置 FILE *fp = fopen(outFileName.c_str(), "wb");//新建并打来一个文件 以便下载后写入 if (! fp){ sendErrorMessage(kCreateFile); CCLOG("can not create file %s", outFileName.c_str()); return false; } // Download pacakge CURLcode res; curl_easy_setopt(_curl, CURLOPT_URL, _packageUrl.c_str());//设定curl的链接 curl_easy_setopt(_curl, CURLOPT_WRITEFUNCTION, downLoadPackage); curl_easy_setopt(_curl, CURLOPT_WRITEDATA, fp);//设置将data写入到文件流fp中 curl_easy_setopt(_curl, CURLOPT_NOPROGRESS, false);//设为false 下面才能设置进度响应函数 curl_easy_setopt(_curl, CURLOPT_PROGRESSFUNCTION, assetsManagerProgressFunc);//进度响应函数 curl_easy_setopt(_curl, CURLOPT_PROGRESSDATA, this);//数据传输的对象 res = curl_easy_perform(_curl); curl_easy_cleanup(_curl); if (res != 0){ CCLOG("error when download package"); fclose(fp); return false; } CCLOG("succeed downloading package %s", _packageUrl.c_str()); fclose(fp);
数据写入函数跟之前的getVersionCode差不多 只是向不同的对象写入 用的函数也不一样
static size_t downLoadPackage(void *ptr, size_t size, size_t nmemb, void *userdata){ FILE *fp = (FILE*)userdata; size_t written = fwrite(ptr, size, nmemb, fp); return written; }
进度条响应函数的功能主要是 更新下载的进度 即为 (int)nowDownloaded/totalToDownload*100
assetsManagerProgressFunc(void *ptr, double totalToDownload, double nowDownloaded, double totalToUpLoad, double nowUpLoaded)
当然更新包下载下来,还需要解压,替换等步骤。
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2305
- 用户1336
- 访客11461635
每日一句
Loving helps grow; liking just takes.
爱助生长,喜欢只懂索取。
爱助生长,喜欢只懂索取。
新会员