做过http异步下载文件的请帮忙看一下

原创 2017年01月03日 00:41:25
我用http异步 下载文件时,在下载函数里循环 接收文件数据时没有问题,
do   
{   
INTERNET_BUFFERS InetBuff;   
FillMemory(&InetBuff, sizeof(InetBuff), 0);   
InetBuff.dwStructSize = sizeof(InetBuff);   
InetBuff.lpvBuffer = lpReadBuff;   
InetBuff.dwBufferLength = sizeof(lpReadBuff) - 1;   

if (!InternetReadFileEx(hRequest,   
&InetBuff,   
0, 2))   
{   
if (GetLastError() == ERROR_IO_PENDING)   
{   
 
WaitForSingleObject(hRequestCompleteEvent, INFINITE);   
}   
else   
{   
 
return;   
}   
}   
fwrite(lpReadBuff, sizeof(char),InetBuff.dwBufferLength, pFile);
memset(lpReadBuff, 0, sizeof(lpReadBuff));

if (InetBuff.dwBufferLength == 0)    
bAllDone = TRUE;   

} while (bAllDone == FALSE); 

但是我想在回调函数里处理接收数据,毕竟是异步嘛,数据处理在回调函数里接收比较好
        
        case INTERNET_STATUS_RESPONSE_RECEIVED:   
        {   
                DWORD *dwBytesReceived = (DWORD*)lpStatusInfo;   
                if (*dwBytesReceived == 0)   
                    bAllDone = TRUE;   

                if (pFile)   
                {   
                        if (bAllDone)   
                        {
                                InternetCloseHandle(hRequest);
                                InternetSetStatusCallback( hInstance, NULL);
                                InternetCloseHandle(hInstance);
                                fclose(pFile);
                                return;
                        }
                                fwrite(lpReadBuff, sizeof(char),*dwBytesReceived, pFile);
                        memset(lpReadBuff, 0, sizeof(lpReadBuff));

                        INTERNET_BUFFERS InetBuff;   
                        FillMemory(&InetBuff, sizeof(InetBuff), 0);   
                        InetBuff.dwStructSize = sizeof(InetBuff);   
                        InetBuff.lpvBuffer = lpReadBuff;   
                        InetBuff.dwBufferLength = sizeof(lpReadBuff) - 1;   

                        if (!InternetReadFileEx(hRequest,   
                                &InetBuff,   
                                0, 2))   
                        {   
                                if (GetLastError() == ERROR_IO_PENDING)   
                                {   
                                        WaitForSingleObject(hRequestCompleteEvent, INFINITE);   
                                }   
                                else   
                                {   
                                        return;   
                                }   
                        }   
                } 

但是我在回调函数里接收数据,WaitForSingleObject(hRequestCompleteEvent, INFINITE);   时进入不了INTERNET_STATUS_REQUEST_COMPLETE状态,
但是在主函数里循环 接收就可以进入那个状态,
我的方法有什么问题?求大家解惑!!

实现异步多线程下载文件

我是基于一名大神的思路写的,如果想看更多内容,下面大神的blog地址 http://blog.csdn.net/shimiso/article/details/6763664xml文件...
  • Anny_Lin
  • Anny_Lin
  • 2015年08月15日 15:43
  • 1009

C# 异步下载文件

在C#当中,利用WebClient这个核心类,可以轻易的打造一个下载器。但是这里想要强调的是,我们用的是异步操作。所谓异步,是相对于同步的概念而言的。比如Web中的Ajax就是基于异步的。它能够提供良...
  • guwei4037
  • guwei4037
  • 2014年01月05日 23:31
  • 11989

php根据Http请求头部信息下载文件

朋友遇到一个问题,php访问一个下载地址,获得的只有地址的请求值,而没有问题,经过大神的指导发现,原来下载地址有经过校验,要在浏览器环境下才能下载,用php的header模拟浏览器环境,就能下载了。大...
  • u013659696
  • u013659696
  • 2017年09月07日 11:26
  • 204

下载文件思路

下载文件直接请求获取: 这种方式会将数据全部接收回来,然后一次性存储到文件中,会出现内存峰值问题,也没有进度跟进 //ViewController.h#import @interface ViewCo...
  • u010545519
  • u010545519
  • 2016年05月11日 14:14
  • 3101

HTTP请求异步和同步的区别

转自:http://kevinpeng.javaeye.com/blog/677797  举个例子:普通B/S模式(同步)AJAX技术(异步)  同步:提交请求->等待服务器处理->处...
  • u013063153
  • u013063153
  • 2016年10月08日 11:31
  • 1837

android开发步步为营之67:使用android开源项目android-async-http异步下载文件

android-async-http项目地址 https://github.com/loopj/android-async-http,android-async-http顾名思义是异步的http请求,...
  • figo0423
  • figo0423
  • 2015年07月14日 21:53
  • 1640

Spring3.2异步处理http请求

解决的问题: 目前系统中,有个别的查询比较慢,大概需要几秒才能返回结果。在大量使用此功能时导致系统变慢。 可能会出现的原因: 1、程序问题(包括业务设计、业务逻辑处理、数据库优化等) 2、架构...
  • dream8062
  • dream8062
  • 2015年10月28日 10:03
  • 683

谁能帮忙看一下

  • f323969_?*
  • f323969_?*
  • 2009年10月27日 20:27
  • 83

帮忙看一下。谢谢!

server: 1  #include     2  #include     3  #include     4  #include     5  #include     6  #include ...
  • linux_performance
  • linux_performance
  • 2009年02月14日 18:37
  • 261

【前端】利用ajax实现伪文件异步上传下载

利用ajax可以实现很酷的效果,在不刷新页面的情况下提交表单、修改数据状态等等,可是如果表单里还有input:file可就惨了,ajax不支持文件的处理啊! ajax是使用了浏览器内部的XmlHttp...
  • smok56888
  • smok56888
  • 2015年11月25日 15:20
  • 3877
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:做过http异步下载文件的请帮忙看一下
举报原因:
原因补充:

(最多只允许输入30个字)