用NMFTP时遇到的一个问题,求解
程序中是用的NMFTP从服务器中下载需要的文件,下载的文件总共有二十来个的样子,下载的单个文件通常都是几百K至2M左右。
我的问题是若客户端和服务器在一个网段上的时候,不管下多大的文件都能正确下载,但如果跨了几个网段,如果那些下载的文件中有某个文件较大的话(其实也不算很大,4M左右,每月总有一天,有一个要下载的文件会突破4M),这个较大的文件总是下载不全,不得其解,盼有解答
问题点数:40、回复次数:5Top
1 楼Drate(小虫(好好学习,天天向上))回复于 2003-09-02 23:02:40 得分 20
下载不全有没有提示呀?
不会就这么不声不响的就完了吧?
或者你可以在INTERNET上试试会不会有这样的情况呢?
Top
2 楼Drate(小虫(好好学习,天天向上))回复于 2003-09-02 23:03:32 得分 0
要不用NMFTP的断点续传试试?
端点续传
断点续传是支持从文件的不同偏移开始传送数据,普通传送是从文件开头传送,
在 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来续传的代码。
---以上资料来自《DELPHI TIPS》Top
3 楼hnhb(不死鸟)回复于 2003-09-02 23:12:44 得分 0
to Drate(小虫):
那个FindFirst是自定义函数吗?我在delphi的帮助里找不到啊!
Top
4 楼hnhb(不死鸟)回复于 2003-09-02 23:16:11 得分 0
下载不全没提示,提示的全是写在OnSuccess里的代码,写在OnFailure里的代码一句都没提示出来。
我下载的那些文件全是ZIP文件,直到程序解压不正常我才发现文件没有下载完全的。
另:
你的代码中的那个FindFirst()是自定义函数吗?我怎么在Delphi的帮助里找不到?
Top
5 楼hnhb(不死鸟)回复于 2003-09-02 23:21:29 得分 0
再追问一下:
文件全部下载完后,没有断开FTP继续对下载到本地的文件做别的处理,可是如果过了大概十来分钟才处理完后,FTP好象自己自动断开了,如果只处理几分钟的话,FTP不会断开,这时又可以下载别的文件了,这是怎么回事?Top
6 楼ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net)回复于 2003-09-03 00:19:14 得分 20
断点技术
不要在使用NM组件了,很不好用的,现在是Indy最好了
LYFTP http://lysoft.7u7.netTop




