libcurl断点下载遇到的问题
最近游戏把资源(图片、配置、lua)的加载、更新全部改了 ,加载其实还好,就是不走之前的zip解压方式。
以前的大体流程:
下载 –> 启动 –> 解压 –> 更新 –> 进入游戏
现在的大体流程:
下载 –> 启动 –> 更新 –> 进入游戏
之前使用散文件gzip方式更新,现在换成下载zip包(断点下载)
在改动完成之后准备提交appstore,结果崩溃的发现在某些设备上debug可以正常更新、release就始终有问题,一直失败。后来在mac上安装了http的抓包工具:HttpScope。发现在head请求之后就不再继续走下去了,然后就猜测是否因为release的原因,导致写入文件时遇到权限问题了,然后就打log,重新生成release包测试…
最后定位到的问题是,head请求始终返回的是0,代码是这样写的:
m_pUrlHandle = curl_easy_init(); double dSize = 0.0f;curl_easy_setopt(m_pUrlHandle, CURLOPT_URL, m_strRemoteFileUrl.c_str());curl_easy_setopt(m_pUrlHandle, CURLOPT_HEADER, 1); curl_easy_setopt(m_pUrlHandle, CURLOPT_NOBODY, 1);if (curl_easy_perform(m_pUrlHandle) == CURLE_OK) { curl_easy_getinfo(m_pUrlHandle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &dSize);} else { dSize = 0.0f;} curl_easy_cleanup(m_pUrlHandle);m_pUrlHandle = NULL;
改动就是去掉curl_easy_setopt(m_pUrlHandle, CURLOPT_HEADER, 1);
默认CURLOPT_NOPROGRESS为开启的
CURLOPT_NOSIGNAL我也设置过,没用。CURLOPT_HEADER如果打开,它会将头信息输出在body中,会不会是因为没有设置CURLOPT_WRITEFUNCTION函数引起的问题呢?
仔细查curl的官方文档http://curl.haxx.se/libcurl/c/CURLOPT_WRITEFUNCTION.html,有这样的发现:
也就是如果没有设置CURLOPT_WRITEFUNCTION,那它会调用默认的fwrite方法,那它的路径会是什么呢?不清楚,上面也没写,所以就有可能导致写入失败,从而导致得到的size始终为0
libcurl断点下载遇到的问题相关推荐
- iOS网络-NSURLSessionDataTask大文件离线断点下载
什么叫离线断点下载,就是用户下载中关闭程序重新打开可以继续下载 代码实现如下: #import "ViewController.h" @interface ViewControll ...
- 使用NSURLConnection实现大文件断点下载
使用NSURLConnection实现大文件断点下载 由于是实现大文件的断点下载,不是下载一般图片什么的.在设计这个类的时候本身就不会考虑把下载的文件缓存到内存中,而是直接写到文件系统. 要实现断点下 ...
- Android多线程断点下载
到华为后,信息管理特别严格,文件不能外发.所以好久都没写博客了,今天周日,老婆非要我学习.就闲来无事,写一篇博客,呵呵-- 前段时间,项目中提到了断点下载apk并静默安装的需求.本打算用应用市场成熟的 ...
- iOS开发网络篇—多线程断点下载
iOS开发网络篇-多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始, ...
- 一行代码快速搞定Flowable断点下载(下)
一行代码快速搞定Flowable断点下载(下) 其实这个主题对应的三篇文章真的真的非常难写,首先是感觉非常多人对于函数式编程不太熟悉,然后又有一些人对于kotlin不太熟悉.这就导致了,写这三篇文章的 ...
- 一行代码快速搞定Flowable断点下载(中)
一行代码快速搞定Flowable断点下载(中) 感觉上一篇家常聊了太多,这一篇就直接进入正题,首先来看一下,通过存储化以及方法拓展技术将mComposableDisposable的相关逻辑也从抽象Ac ...
- 一行代码快速搞定Flowable断点下载(上)
一行代码快速搞定Flowable断点下载(上) 之前我们大致讲了讲,到底怎么完全将disposable相关代码完全隐藏. 然后到了这里,可能有些杠精就会说了,你那个方式,我们不是完全不能拿到Flowa ...
- Java多线程断点下载
多线程下载已经提高了下载的效率,但是当一些特殊情况发生的时候,我们需要对程序进行处理,这样效率会更高.比如,断电断网等造成下载中断,那么我们下一次又要重新开始下载,这样效率底下,所以我们可以考虑使用断 ...
- C#实现http断点下载
我们寄希望于万能的解决方案,但是现实的情况总是很糟糕.在软件编程的世界中,技术分散的情况尤为严重,且不说各种语言拥有的优势不能融合,单就一门语言而言,就拥有众多的技术和相关技术需要学习.网络编程就是这 ...
最新文章
- WISEGATE:SIEM的最佳实践讨论
- Consul入门05 - 健康检测
- Attention的本质:从Encoder-Decoder(Seq2Seq)理解
- 编写函数,模拟内置函数 sorted()。
- 如何设置游戏分辨率(C++)
- 无代码iVX编程实现简单魂斗罗
- mysql主键和聚簇索引_[MySQL] innoDB引擎的主键与聚簇索引
- 复制带随机节点的链表
- java set排序_Java Set排序的方法
- 计算机文档用什么翻译,Word文档翻译在哪里(适于Word2010-Word2016)?
- Swift - 项目部署配置(支持的系统,设备和状态条样式等)
- python 直线检测_python hough变换检测直线的实现方法
- RF接口测试中的重复执行
- 提高效率:17款超赞的谷歌chrome浏览器插件、扩展程序
- java手机验证码注册_Java手机验证码注册
- Windows Server 无法启用 网络发现
- clustalw序列比对_COBALT:NCBI在线蛋白多序列比对(比ClustalW还强大的工具)
- 18771:奶牛的草(multimap)
- 方根法公式_(完整word版)层次分析法中用方根法计算权重在Excel中的具体操作
- 由于无法验证发布者 所以windows阻止此软件