如何用Delphi实现ftp的断点续传和多任务下载呢??????(50分)

  • 主题发起人 主题发起人 vinky
  • 开始时间 开始时间
V

vinky

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用Delphi实现ftp的断点续传和多任务下载呢??????
请高手们指教阿!!!
 
<程序员>近两期有关于HTTP的,参考一下它和MSDN[:)]
 
请查看ftp的协议
其中包含了断点续传的方法
多任务下载也可从此得到

另,可以看“零点编程”中的文章 对net vampire的研究
 
能详细说一下吗?有关断点续传的地方
 
可以先了解一下协议.
你可以使用telnet 到一个ftp站点最好是本机上的IIS
TELNET 127.0.0.1 ; 系统会显示欢迎信息
USER anonymons ; 匿名登陆,系统会提示你写入密码 也可以为空
PASS
REST 100 ; 这一句是测试系统是否支持断点下载的, 一般现在的server都支持的
SIZE test.zip ; 取得你要的文件的尺寸
TYPE I ; 设为以二进制传输的方式
PASV ; 以被动方式请求数据传输端口,系统会发回如:(192,168,0,34,5,124) 前面4个数字是ip地址,后面的组合是端口地址这里需要一个算法合成PORT = 5 shl 8 + 124; 这个时候你可以在使用telnet 192.168.0.34 1404 这里是准备好了数据连接然后再输入去文件的命令.
RETR test.zip ; 你就可以看到刚刚打开的数据连接会不断的传输数据,知道文件传输完毕.
QUIT ; 退出ftp.

测试过原理之后就可以考虑怎么写程序了.
断点下载就是把文件分成几块然后使用rest 命令设定起始位置传输完成需要的字节数之后在断开数据连接就可以了.
你可以试一下的.
我使用socket 的阻塞方式传文件.
有问题可以讨论一下.
cloudqq@magicdown.com, http://www.magicdown.com



 
首先你的FTP服务器必须支持断点传续,用Indy控件实现的,供参考。
procedure TfrmMain.FTPDownload(str,strTo: string);
var
Stream: TFileStream;
strFrom: string;
sr: TSearchRec;
begin
if FileExists(strTo) then
begin
FindFirst(strTo, faAnyFile, sr);
if sr.size < idFTP.size(strFrom) then
begin
if Application.MessageBox('文件存在,继续下载吗?', '注意', MB_YESNO) = idYes then
begin
if idFTP.Connected then
begin
Stream := TFileStream.Create(strTo, fmOpenWrite);
Stream.Seek(0, soFromEnd);
DownloadedLen := sr.Size;
idFTP.SendCmd(Format('REST %d', [sr.Size]));
try
try
idFTP.Get(strFrom, Stream);
except
end;
finally
Stream.Free;
end;
end;
end;
end;
end;
end;
多任务没有试过。
 
后退
顶部