最近游戏把资源(图片、配置、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断点下载遇到的问题的更多相关文章

  1. libcurl断点下载

    开发需要写了一个处理curl 下载的c++类,内含有多个静态方法和实例方法,写在这里留给有需求的同学 头文件 CURLHelper.h enum CURLHelperStateType { CURLH ...

  2. 使用libCurl实现断点下载

    关键部分代码如下: #include "curl.h" #pragma comment(lib, "libcurl.lib") size_t CROS_Down ...

  3. Java实现多线程断点下载(下载过程中可以暂停)

    线程可以理解为下载的通道,一个线程就是一个文件的下载通道,多线程也就是同时开启好几个下载通道.当服务器提供下载服务时,使用下载者是共享带宽的,在优先级相同的情况下,总服务器会对总下载线程进行平均分配. ...

  4. 安卓(android)之实现断点下载功能

    一.建立实体类 1.文件实体类 package com.example.zjw.myapplication.dao; import java.io.Serializable; /** * 预下载文件实 ...

  5. iOS 大文件断点下载

    iOS 在下载大文件的时候,可能会因为网络或者人为等原因,使得下载中断,那么如何能够进行断点下载呢? // resumeData的文件路径 #define XMGResumeDataFile [[NS ...

  6. 【Java EE 学习 22 下】【单线程下载】【单线程断点下载】【多线程下载】

    一.文件下载简述 1.使用浏览器从网页上下载文件,Servlet需要增加一些响应头信息 (1)response.setContentType("application/force-downl ...

  7. IOS 断点下载

    // // ViewController.m // UI4_断点下载 // // Created by qianfeng on 15/8/19. // Copyright (c) 2015年 ZBC. ...

  8. .net网站的文件上传读取进度条和断点下载

    文件上传到服务器时的进度读取 //调整上传配置 AdapterInfo(info); UpfileResult result = new UpfileResult(); try { //直接使用req ...

  9. iOS开发——网络篇——NSURLSession,下载、上传代理方法,利用NSURLSession断点下载,AFN基本使用,网络检测,NSURLConnection补充

    一.NSURLConnection补充 前面提到的NSURLConnection有些知识点需要补充 NSURLConnectionDataDelegate的代理方法有一下几个 - (void)conn ...

随机推荐

  1. R语言学习笔记:使用tcltk包显示进度条

    一般在跑耗时较长的程序时,我们不知道程序到底有没有正常跑着,或者在爬虫的时候不知道爬到什么时候断了.因此可以添加进度条来显示当前进度,观察进度是否有进展.当进度条卡住的时候,可以判断程序断线,从而可以 ...

  2. 让HTML5来为你定位(转)

    add by zhj: HTML5的地理定位返回的应该都是GPS坐标,即WGS-84坐标,参见Map Types - Google Maps JavaScript API v3 本文使用的是Chrom ...

  3. 007.SMB其他应用

    一 目录权限 系统权限需要对共享目录生效 samba服务器权限也会对共享目录生效 当用户过多权限交叉的时候,建议使用系统权限控制共享目录权限,而不建议采用samba权限来控制 例如: [work] p ...

  4. 转载-解决ORACLE 在控制台进行exp,导出时,空表不能导出

    一.问题原因: 11G中有个新特性,当表无数据时,不分配segment,以节省空间 1.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segm ...

  5. error 1044 (42000):access denied for user ''@'localhost' to database 'quickapp' 解决方法

    在虚拟机上重新创建一个数据库时,一直出现这个报错:error 1044 (42000):access denied for user ''@'localhost' to database 'quick ...

  6. Python3 贝叶斯分类

    # -*- coding: utf-8 -*- """ Created on Tue Jan 16 20:11:07 2018 @author: markli " ...

  7. Java中static块执行时机

    Java中static块执行时机 演示例子 在使用static进行初始化的操作,怎么也执行不了!代码如下: public class StaticDemo { public static final ...

  8. BZOJ4280 : [ONTAK2015]Stumilowy sad

    线段树每个区间维护上下界以及要整体增加的标记即可,时间复杂度$O(m\log n)$. #include<cstdio> #define inf 1500000000 int n,m,op ...

  9. ROS知识(22)----USB口映射固定名字

    如果有多个usb链接到电脑,如果插入的先后顺序不同,那么会导致对应的usb口也会不同,例如当只有一个激光的usb链接到电脑,其设备名字为/dev/ttyUSB0:当如果有底盘的usb以及激光的usb连 ...

  10. Linux——多线程下解决生产消费者模型

    我们学习了操作系统,想必对生产消费者问题都不陌生.作为同步互斥问题的一个经典案例,生产消费者模型其实是解决实际问题的基础模型,解决很多的实际问题都会依赖于它.而此模型要解决最大的问题便是同步与互斥.而 ...