请问如何象JetCar那样实现文件的分段同步下载

drmy 2000-08-17 10:12:00
...全文
184 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fantsy 2000-08-20
  • 打赏
  • 举报
回复
关注!
drmy 2000-08-20
  • 打赏
  • 举报
回复
还有人知道吗?还是不想告诉我?
drmy 2000-08-18
  • 打赏
  • 举报
回复
多谢blind_man,等我研究一下。
shines77 2000-08-18
  • 打赏
  • 举报
回复
关注
blind_man 2000-08-18
  • 打赏
  • 举报
回复
不错,用断点续传可以解决这个问题。
清华出版的一本叫做《因特网应用编程》的书(在海店读书城可以买到)中有这方面的解释。
它里面有实现断点续传的HTTP和FTP服务器的例子,不过是用VC++编写的。我已将这些例子
发送给你了,不知是否有帮助。
drmy 2000-08-18
  • 打赏
  • 举报
回复
谁能给个例子程序?
drmy 2000-08-17
  • 打赏
  • 举报
回复
谢谢,可以更详细点吗?
U皮特U 2000-08-17
  • 打赏
  • 举报
回复
下载文件的过程等同于打开一个远程文件,分块读取,写入本地文件,关闭远程文件。分段下载的原理是这样的:首先取得远程文件的长度,然后移动文件指针比如100个字节,如果成功,表示支持断点续传,可以分段下载,否则不支持断点续传,只能连续下载。
如果支持断点续传,通过一个分段策略(比如文件长度小于10K就不分段等等)将文件平分为n段,然后创建n个线程,每个线程都打开远程文件,将文件指针移动到本线程负责的分段的首位置,开始读取文件,直至本分段内容读取完成。如果此时其它线程工作还没有完成,可以选择其中一个最长的分段再一分为二,接管后面那段继续工作。
还应该有一个总管线程,负责监视当前每个下载线程已读取的字节数,如果超过一个规定的数值(比如100K),就将已读取的字节写入本地文件相应的位置,然后刷新各线程的工作状态,保证读取文件的同步。
zhouzq 2000-08-17
  • 打赏
  • 举报
回复
关注
U皮特U 2000-08-17
  • 打赏
  • 举报
回复
原理应该说得很清楚了,再详细就涉及到编码了。你可以看一下CInternetSession,CHttpConnection,CFtpConnection,CInternetFile这几个类,串接在一起就能完成下载远程文件的工作。得到打开的CInternetFile就可以象正常文件操作那样移动文件指针(实现分段下载、断点续传等)、读取等。其中对FTP有一些特殊,不支持文件指针移动,一般通过创建Socket连接,然后发送FTP命令的方式实现,具体FTP命令的使用可以用一些常用的FTP工具象CuteFTP,BulletFTP等实际下载一个文件,它们的记录窗口中都有显示具体命令发送的过程(包括文件指针移动),用网络蚂蚁看一下也行。

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧