社区
C语言
帖子详情
linux c下,基于http的文件下载的断点续传
wangrui007
2010-04-17 10:26:32
我想从服务器上下载一个大文件(基于http协议的下载)用标准c写
怎么能实现断点续传,希望一个完整的源码 。主要是上一次下载(没有下载完)与下载怎么整合到一起成为一个完整的文件,如果使用多线程下载,代码应该怎么写?
...全文
889
14
打赏
收藏
linux c下,基于http的文件下载的断点续传
我想从服务器上下载一个大文件(基于http协议的下载)用标准c写 怎么能实现断点续传,希望一个完整的源码 。主要是上一次下载(没有下载完)与下载怎么整合到一起成为一个完整的文件,如果使用多线程下载,代码应该怎么写?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sjy88813
2011-07-22
打赏
举报
回复
mark
pure_coder
2010-10-17
打赏
举报
回复
这里有个跨平台的下载库,支持HTTP,FTP,HTTPS,多线程下载,还能在WinCE,Linux,IPhone上跑,你可以参考下
http://www.easygeteasy.com
libin1201119
2010-07-23
打赏
举报
回复
帮顶 坐等解决
阿磊2013
2010-04-18
打赏
举报
回复
帮顶,学习一下。不过我曾看过bt协议,实现的很巧妙,建议去看一下
shiweifu
2010-04-18
打赏
举报
回复
你是不是在因为断点续传而烦恼着呢?告诉你不用了,现在我将详细的从断点续传的原理帮你解决这个问题。
(一)断点续传的原理
其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:
假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。
GET /down.zip HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Connection: Keep-Alive
服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下:
200
Content-Length=106786028
Accept-Ranges=bytes
Date=Mon, 30 Apr 2001 12:56:11 GMT
ETag=W/"02ca57e173c11:95b"
Content-Type=application/octet-stream
Server=Microsoft-IIS/5.0
Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给Web服务器的时候要多加一条信息--从哪里开始。
下面是用自己编的一个"浏览器"来传递请求信息给Web服务器,要求从2000070字节开始。
GET /down.zip HTTP/1.0
User-Agent: NetFox
RANGE: bytes=2000070-
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
仔细看一下就会发现多了一行RANGE: bytes=2000070-;这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。
服务器收到这个请求以后,返回的信息如下:
206
Content-Length=106786028
Content-Range=bytes 2000070-106786027/106786028
Date=Mon, 30 Apr 2001 12:55:20 GMT
ETag=W/"02ca57e173c11:95b"
Content-Type=application/octet-stream
Server=Microsoft-IIS/5.0
Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT
和前面服务器返回的信息比较一下,就会发现增加了一行:
Content-Range=bytes 2000070-106786027/106786028
返回的代码也改为206了,而不再是200了。
知道了以上原理,就可以进行断点续传的编程了。
发的HTTP头中,支持你指定的字节范围。。这下LZ明白了吧
shiweifu
2010-04-18
打赏
举报
回复
下载文件就是CLIENT端先构建个字符串的HTTP头,给服务器发过去
然后服务器给你先发个带大小的HTTP头,接着给你发文件
断点续传如果大文件,我觉得得用到文件映射
spygg
2010-04-18
打赏
举报
回复
路过看下,正学基础……
ForestDB
2010-04-18
打赏
举报
回复
帮顶。
q307742556
2010-04-17
打赏
举报
回复
不 知道怎么搞了
huanmie_09
2010-04-17
打赏
举报
回复
我是来学习的.
do_fork
2010-04-17
打赏
举报
回复
还没学会游泳之前,最好不要尝试横渡长江
wangrui007
2010-04-17
打赏
举报
回复
如果我是多线程下载,重新下载时那怎么处理这个fseek,应该定位什么位置,怎么实现。
hittlle
2010-04-17
打赏
举报
回复
一个简单的思路就是:记下要下载的文件的总字节数,并记下已下载的记节数,重新下载时,先fseek到相应的字节数处,再开始下载;这是最简单的
柯本
2010-04-17
打赏
举报
回复
看一下wget的源码吧,这个不是一句二句就能完成的
http://download.csdn.net/source/536402
ftp
断点续传
实现
ftp实现
断点续传
,ftp支持上传续传 ftp
断点续传
基于c语言的实现。
Electron中实现大文件上传和
断点续传
功能
Electron官网的描述:Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和
Linux
系统下的应用来实现这一目的。 从官网的描述我们可以简单的概括,Electron是开源的框架,可以使用h5来开发跨平台pc桌面应用,这样前端开发这可以开发桌面应用了。由于它是基于Chromium和Node.js开发的,所以在Electron中既可以使用浏览器中的api也可以使用node的api。 下面我们在Electron中实现
cocos2d-lua热更新实战(纯lua版本+
断点续传
)
热更流程技术和
断点续传
重构整合。纯Lua框架设计理念与实现。可无缝集成到自己的框架产品,且功能演示与测试完善。
wget下载blob文件
断点续传
1
我们通过打印wget –c的服务器回应,发现默认发起的
http
请求是基于早期的REST版本的2009-09-19,而这个版本及更早的则不支持range请求格式”
C C++
Linux
多线程文件程序
基于
linux
下的c/c++程序,多线程,
断点续传
功能没有实现, 可传输大于2G的文件。 设计思想:预先分配的N个缓冲区形成类似循环队列。 【1】预先分配N个缓冲区,多线程方式对缓冲区进行读写互斥,有类似生产者消费者的思想。 【2】服务器两个线程,一个线程负责读文件进入缓冲区,另一个线程负责发送文件数据。 【3】客户端两个线程,一个线程负责接收文件进入缓冲区,另一个线程负责写文件数据。 【4】服务器端,命令行./Server_NBuffer 要传输的文件名 【5】客户端,命令行./Client_NBuffer 服务器地址
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章