VC C++ 断点续传 http 多线程 下载 源代码

这篇博客分享了一个经过验证的断点续传源代码,解决了多次尝试未果的问题。作者特别感谢最初提供代码的匿名作者,并指出代码中存在一个小bug。尽管如此,这个代码被认为是迄今为止最强大的解决方案。博客鼓励下载者给予反馈,通过评论或留言的方式表达对这份资源的赞赏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  网上找了大半天,使用了5、6个代码,都是废的,总有这样那样的问题。都是打着断点续传的幌子,做不了实事~~~

  最后还是回到了最早找到的Mydownload。先向这个匿名作者表示衷心的感谢~~~

  看了这个代码,还是觉得这个代码最强大~~~~但有小bug,虽然每次下载先判断有没有中间文件存在,但就是续传错误。本来作者的意图是接着那个中间文件继续写数据,但他就是漏了fseek一句话。加上,Ok~~

  废话少说,详细请见附件~~~

  开博客这么久,评论都没一条,悲剧~~怎么说都不少原创文章嘛~~~这个代码直接贡献了,下载的朋友真的给个面子,留句话吧。我定内牛满面~~~

  下载请留言~~~谢谢

      点击下载:VC断点续传源代码

在自己的工程中引入所有文件,在stdafx.h中对照本下载工具项目的stdafx.h,应该是要加入afxsock.h。 参考main.cpp。主要是调用DownloadHelper。先添加任务,然后设置onFinish(下载完成后的动作),最后start。 如果目录中已有该文件,程序会自动覆盖,不会出错。 默认下载端口是80,不支持其他端口。如果要这个功能,请修改Mydownload中的fnMyDownload,HttpDownLoadNonProxy加入nHostPort。 ###fnMyDownload说明: bool fnMyDownload( CString strUrl, CString strWriteFileName, unsigned long *& downloaded, unsigned long & totalSize, CString strProxy, int nProxyPort, int nThread ) strUrl: 需要下载的文件地址, 如:“http://10.20.1.6/musiconline/091029/daisy.mp3” strWriteFileName: 下载后文件的存放地址,如:“d:\\” downloaded: 指针引用,调用函数后会不断变化,实时反映已下载多少字节的数据 totalSize: 传递引用,表示所要下载文件的总长度,与downloaded配合可以分析各种下载信息 strProxy,nProxyPort 这两个为代理选项,有的话填上,如"192.168.1.89",8080 没有的话麻烦点填上"",0 。(呵呵,暂时没有去研究具体怎么使用) nThread: 用于下载开启的线程数,一般3,4个最佳。。太多反而降低速度,而且有些服务器不支持多连接。 例:fnMyDownload("http://10.20.1.6/musiconline/091029/daisy.mp3","d:\\",downloaded,totalSize,"",0,3) ###代码说明 Mydownload.cpp底端的fnMyDownload函数是下载器的关键函数。 其中在原作者的基础上,加了几句编码转换的代码。把网络的文件名和路径转化为UTF8,但这里可能会有问题,例如中文域名。有需要,请再作修改。 DownloadHelper是外围封装的类,用于列表管理,自动断点重连。 ChineseCode用于编码转换。 Thread是一个封装好的线程类,被DownloadHelper继承。类似于Java的Thread类。 ###Mydownload代码笔记: 从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。 ###开发测试环境: windows xp + Visual C++ 6.0 !!!!!!需要使用MFC环境!!!!!!!!!!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值