关于多线程下载的问题?(200分)

  • 主题发起人 主题发起人 lxhui99s039
  • 开始时间 开始时间
L

lxhui99s039

Unregistered / Unconfirmed
GUEST, unregistred user!
多线程下载同个文件,请问如何控制每个线程的结束位置 ?
 
当然是根据下载的字节数来控制了
先取得文件的总大小,然后分配各个线程下载任务:
如一个200K的文件,四个线程下载,则
A 1..50K
B 50K + 1 .. 100K
C 100K + 1 .. 150K
D 150K + 1 .. 200K
 
我也这样分析过,但不知用程序该怎么控制呢?还望多多指教希望能有源码。
 
服务器要支持多点下载
取得文件大小,分段
每个线程从不同的断点下载
 
不知怎么控制? 你用什么方法下载?
肯定支持从指定字节下载到指定长度的文件内容的。
 
在 RETR 或 STOR 命令发送前先发送一个 REST xxx,表示从文件的偏移 xxx 处
开始传送,注意,有的服务器可能不支持 REST 命令。
如果使用ICS控件,那么
HttpCli.ContentRangebegin
:= '100' 表示从100开始
HttpCli.ContentRangeEnd :='' 表示一直到结束
HttpCli.ContentRangeEnd :='200' 表示到200字节处结束
如果使用 TNMHTTP 控件
在OnAboutToSend事件,写:
NMHTTP1.SendHeader.Values['Range'] := 'bytes=100-' 表示从100字节处开始下载到最后
NMHTTP1.SendHeader.Values['Range'] := 'bytes=100-200' 表示从100字节处开始下载到200字节处结束
***************
procedure TForm1.Button6Click(Sender: TObject);
var
f:TSearchRec;
begin
FindFirst('a.doc',faAnyFile,f);
fPreSize:=f.Size;
NMFtp.DoCommand('Rest '+IntToStr(fPreSize));
NMFtp.DownloadRestore('a.doc','a.doc');
end;
这是用TNMFtp来续传的代码。
 
如果直接用socket,可以研究一下rfc。里面有命令说明
 
多人接受答案了。
 
后退
顶部