程序中是用的NMFTP从服务器中下载需要的文件,下载的文件总共有二十来个的样子,下载的单个文件通常都是几百K至2M左右。  我的问题是若客户端和服务器在一个网段上的时候,不管下多大的文件都能正确下载,但如果跨了几个网段,如果那些下载的文件中有某个文件较大的话(其实也不算很大,4M左右,每月总有一天,有一个要下载的文件会突破4M),这个较大的文件总是下载不全,不得其解,盼有解答

解决方案 »

  1.   

    下载不全有没有提示呀?
    不会就这么不声不响的就完了吧?
    或者你可以在INTERNET上试试会不会有这样的情况呢?
      

  2.   

    要不用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);varf:TSearchRec;beginFindFirst('a.doc',faAnyFile,f);fPreSize:=f.Size;NMFtp.DoCommand('Rest '+IntToStr(fPreSize));NMFtp.DownloadRestore('a.doc','a.doc');end;这是用TNMFtp来续传的代码。
     
     
    ---以上资料来自《DELPHI TIPS》
      

  3.   

    to Drate(小虫):
      那个FindFirst是自定义函数吗?我在delphi的帮助里找不到啊!
      

  4.   

    下载不全没提示,提示的全是写在OnSuccess里的代码,写在OnFailure里的代码一句都没提示出来。我下载的那些文件全是ZIP文件,直到程序解压不正常我才发现文件没有下载完全的。另:
    你的代码中的那个FindFirst()是自定义函数吗?我怎么在Delphi的帮助里找不到?
      

  5.   

    再追问一下:
     文件全部下载完后,没有断开FTP继续对下载到本地的文件做别的处理,可是如果过了大概十来分钟才处理完后,FTP好象自己自动断开了,如果只处理几分钟的话,FTP不会断开,这时又可以下载别的文件了,这是怎么回事?
      

  6.   

    断点技术不要在使用NM组件了,很不好用的,现在是Indy最好了LYFTP http://lysoft.7u7.net