看板Programming
标 题Re: Flashget的工作怎办到的
发信站成大资工_BBS (Sat Oct 28 11:58:15 2006)
转信站ptt!ctu-reader!ctu-gate!news.nctu!news.nsysu!news.mksh.phc!news.ccns.n
※ 引述《[email protected] (凉宫春日症候群)》之铭言:
> ※ 引述《[email protected] (台湾黑山猪)》之铭言:
> : 诸如 FlashGet 的软体之所以能快速下载档案,
> : 是因为他将档案分割为数份并下载,下载完成後再进行合并。
> : 我比较好奇的是,这种软体是如何在Server端分割档案?
> 这我刚好知道
> HTTP Request有一种header是可以指定起始点的
> Range: bytes=范围 以数字-数字表示 单位为Byte
> ex: Range: bytes=1307176- 就表示从1307176byte开始抓到完
> 不过当然要看伺服器吃不吃
> 伺服器吃的话会回传206 Partial Content 并从那个地方开始
> 伺服器不理这个header则正常传回200 OK 并从头开始
> 所以FlashGet就是一次开很多条连线 後面连线的就用Range: 从後面开始抓这样
这边有个呼叫 InternetReadFile API 来做续传的程式码:
http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx
?Action=Function&Module=12&Function=67
因此,实体档案先开完整大小,再以 binary 方式直接写入指定位置即可多线下载。
若使用 Windows API ,则必须改注册档,让他可以多线连接,所以自己写会比较好。
另外,线数最好不要开太多,先前我试过针对单一网站开到 256 线,结果
proxy.hinet.net 误判为恶意程式直接把我的要求全挡掉了,问 HiNet客服说没这
样设定,据其他讨论区技术人员说,这应该是 proxy预设值,只是 HiNet客服不清
楚,他举例说,例如 ISA Server 预设是 10 线,超过就挡。HiNet 我试过 32 线
还不会挡。
--
______________________________________________________本版因有你们而壮大
T.L. Cheng 子琏
_______________________________________________________________________
VB讨论:成大资工、程式设计乐园等采tw.bbs.comp.lang.basic信区,请各站加入转信
徐昇网&论坛&API&辅助说明档&福传语言&原始码 http://tlcheng.twbbs.org/wwwmap.htm
培基语言网页 http://tlcheng.twbbs.org/TLCheng/Basic/
--
oRigiN: 成大资工BBS站 (140.116.246.178)
@bbs.csie.ncku.edu.tw
FrOm:59-127-4-39.HINET-IP.hinet.net