下载文件的过程等同于打开一个远程文件,分块读取,写入本地文件,关闭远程文件。分段下载的原理是这样的:首先取得远程文件的长度,然后移动文件指针比如100个字节,如果成功,表示支持断点续传,可以分段下载,否则不支持断点续传,只能连续下载。
如果支持断点续传,通过一个分段策略(比如文件长度小于10K就不分段等等)将文件平分为n段,然后创建n个线程,每个线程都打开远程文件,将文件指针移动到本线程负责的分段的首位置,开始读取文件,直至本分段内容读取完成。如果此时其它线程工作还没有完成,可以选择其中一个最长的分段再一分为二,接管后面那段继续工作。
还应该有一个总管线程,负责监视当前每个下载线程已读取的字节数,如果超过一个规定的数值(比如100K),就将已读取的字节写入本地文件相应的位置,然后刷新各线程的工作状态,保证读取文件的同步。
如果支持断点续传,通过一个分段策略(比如文件长度小于10K就不分段等等)将文件平分为n段,然后创建n个线程,每个线程都打开远程文件,将文件指针移动到本线程负责的分段的首位置,开始读取文件,直至本分段内容读取完成。如果此时其它线程工作还没有完成,可以选择其中一个最长的分段再一分为二,接管后面那段继续工作。
还应该有一个总管线程,负责监视当前每个下载线程已读取的字节数,如果超过一个规定的数值(比如100K),就将已读取的字节写入本地文件相应的位置,然后刷新各线程的工作状态,保证读取文件的同步。
解决方案 »
- 请问如何实现treeview的treenode 里具有combobox 下拉选择功能?
- 请问dxdbtreelist的用法,数据库中的字段设置
- insert 后报错
- 关于RTTI的一个问题
- 有关在程序中实现SQL Server数据库备份的问题。如果分不够可以再加。
- 在win98下如何抓ip包?
- MS程序员有numega为他们做devpartner,Borloand程序员用什么调试工具?
- 如何让windows自动扩展桌面?程序实现。
- 有关读取文本文件的一个问题?请高手LOOK!
- 为什么我的query不能refresh?而换城table就可以?怎么解决?
- 关于socket通信的难题
- DElphi4中的汇编问题,50分,答案2句话,快来拿分!!
清华出版的一本叫做《因特网应用编程》的书(在海店读书城可以买到)中有这方面的解释。
它里面有实现断点续传的HTTP和FTP服务器的例子,不过是用VC++编写的。我已将这些例子
发送给你了,不知是否有帮助。