Delphi实现的Ftp客户端下载(支持断点续传和多线程传输)

作者:老猫 发布于:2012-3-20 10:25 Tuesday 分类:Delphi

        以前写的一个ftp客户端下载的玩意!支持了断点续传,多线程传输等(实际上并非是一个真正多线程的传输与下载模式,是一个伪多线程方式,仅仅是多开ftp端口,连接上之后从指定的数据段位置开始下载,所以要想真正意义上实现一个多线程的模式还是需要在服务器端做相应的处理才能实现!)代码写的很简陋,仅仅提供了一个DownLoad方法,传递一个Ftp格式的URL然后解析出实际地址与文件名等开始实现下载!大致代码:

{*******************************************************}
{                                                       }
{       Ftp客户端下载控件单元               }
{       FtpClient                                       }
{                                                       }
{*******************************************************}

unit FtpClient;

interface
uses Windows,Classes,SysUtils,StrUtils,ScktComp,WinInet, Messages,Forms,IniFiles;

type
  TDxFtpClient = class;

  TDxSockState = (Ds_DataOk,Ds_UserTerminate,Ds_DataErr);

  TReadWriteThread = class(TThread)
  private
    FDataSocket: TClientSocket;
    Owner: TDxFtpClient;
    SocketDataStream: TWinSocketStream;
    procedure DownLoad;
    procedure UpLoad;
  protected
    procedure Execute;override;
    procedure UpdateProgress;
  public
    constructor Create(bSuspend:Boolean;AOwnerFtp: TDxFtpClient;Host: string;Port: Word);
    destructor Destroy;override;
  end;

  TDxFtp = class;


  {FTP的双线连接,数据连接与命令连接}
  TDxFtpClient = class(TComponent)
  private
    FCmdSocket: TClientSocket;//数据连接与命令连接
    DataStream: TMemoryStream;
  protected
    DataSize,ReadySize: Int64;
    OwnerFtp: TDxFtp;
    SocketIndex: Integer;
    ReadWriteThread: TReadWriteThread;
    User,PassWord,DirName,FileName,Host: string;
    ConPort: Word;
    procedure DoCmdSocketRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure DoCmdSocketError(Sender: TObject; Socket: TCustomWinSocket;ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure DoReadWriteEnd(Sender: TObject);
  public
    constructor Create(AOwner: TComponent);override;
    destructor Destroy;override;
    procedure Open;
  end;

  
  //下载开始事件,Conindex指定下载的线程号,startPos和TotalSize分别指定下载开始位置和总数据量
  TOnDownStartEvent = procedure (sender:TObject;conindex: integer;startPos,totalSize:Int64) of object;
  //进度事件,分别指定为当前进度,以及下载速度
  TOnProgressEvent = procedure(Sender: TObject;Const FileReadySize,FileTotalSize: int64;const Progress: Single;const ReadWriteRate: Single) of object;
  //上传下载完成时候触发的事件,ReadyState指定完成的状态
  TOnUpDownReadyEvent = procedure(Sender: TObject;const FileReadySize,FileTotalSize: Int64;const ReadyState: TDxSockState) of object;
  //在下载和上传时,SockStream在读取和写入数据失败的时候触发的事件!WaitAgain表示是否继续等待下一次读取和写入,默认是不等待,
  //如果不等待,则直接中止数据传输,否则一直等待直到有数据读取和写入
  //如果不指定该事件,自动检测10次,如果超过10没有读取或写入数据,代表异常,传输数据中止

  TSocketError = procedure(Sender: TObject;ErrorEvent: TErrorEvent; var ErrorCode: Integer) of object;

  TReadWritDataErrEvent = procedure(Sender: TObject;var WaitAgain: Boolean{继续等待}) of object;
  TDxFtp = class(TComponent)
  private
    FThreadCount: Integer;
    FtpSocketArr: array of TDxFtpClient;
    Ini: TMemIniFile;
    FileTotalSize: Int64;
    FOnDownStart: TOnDownStartEvent;
    FOnProgress: TOnProgressEvent;
    ReadyCount: Integer;//执行完成的数量
    DownStartTick: DWORD;
    BeginSize: Int64;
    SaveFileName: string;
    UserTerminated: Boolean;//用户终止
    CriticalSection: TRTLCriticalSection;//创建一个临界区
    FileStream: TFileStream;
    SaveFileIntime: Boolean;//实时保存数据文件
    IsUpLoad: Boolean;
    FOnUpDownReady: TOnUpDownReadyEvent;
    SockState: TDxSockState;
    FOnReadWriteDataError: TReadWritDataErrEvent;
    FOnSocketError: TSocketError;
    procedure SetThreadCount(const Value: Integer);
    function GetActive: Boolean;
    procedure DownReady;//全部完成,文件合并
    procedure Ready;
  public
    constructor Create(AOwner: TComponent);override;
    destructor Destroy;override;
    property ThreadCount: Integer read FThreadCount write SetThreadCount default 2;//线程数量
    procedure Suspend;//暂停
    procedure Resume;//继续
    procedure Terminate;//终止数据传输
    property Active: Boolean read GetActive;  //是否活动
    procedure DownLoad(const FptUrl: string;SaveToFile:string;const SaveInTime: Boolean = False);//下载
    procedure UpLoad(const FileName,FtpUrl: string);
    procedure SaveCfg(CfgFile: string);//生成配置文件
    property OnDownStart: TOnDownStartEvent read FOnDownStart write FOnDownStart;
    property OnProgress: TOnProgressEvent read FOnProgress write FOnProgress;
    property OnUpDownReady: TOnUpDownReadyEvent read FOnUpDownReady write FOnUpDownReady;
    property OnReadWriteDataError: TReadWritDataErrEvent read FOnReadWriteDataError write FOnReadWriteDataError;
    property OnSocketError: TSocketError read FOnSocketError write FOnSocketError; 
  end;
  
function CheckFileName(const FileName: string): string;
function RightPos(Const SubStr,Str: string;const index: integer=-1): integer;
implementation
const
  RecvTmpBufSize=64*1024;
end.

1.jpg

本文出自 老猫的博客,转载时请注明出处及相应链接。

0标签: ftp

评论

  1. vetement abercrombie 23 分钟前
    Et l脿, une horloge tr猫s Persuasionesque.
  2. chaussure nike solde 39 分钟前
    Delphi实现的Ftp客户端下载(支持断点续传和多线程传输)
    <a href="http://www.lepavillondubienetre.com/aviator/chaussure-nike-solde.html" >chaussure nike solde</a>
    [url=http://www.lepavillondubienetre.com/aviator/chaussure-nike-solde.html]chaussure nike solde[/url]
  3. decollete louboutin 52 分钟前
    <a href=" http://footvip.fr/afd/?p=1855 ">louboutin homme suisse</a>  <a href=" http://footvip.fr/afd/?p=415 ">chaussures louboutin dor茅es</a>  <a href=" http://footvip.fr/afd/?p=1565 ">louboutin chaussures france chaussure christian noir</a>  <a href=" http://footvip.fr/afd/?p=2124 ">louboutin world</a>  <a href=" http://footvip.fr/afd/?p=1970 ">louboutin pour femme</a>  <a href=" http://footvip.fr/afd/?p=1982 ">louboutin prix cass茅</a>  <a href=" http://footvip.fr/afd/?p=1520 ">louboutin bianca</a>  <a href=" http://footvip.fr/afd/?p=476 ">chaussures louboutin magasins en france</a>  <a href=" http://footvip.fr/afd/?p=550 ">chaussures louboutin rouen</a>  <a href=" http://footvip.fr/afd/?p=1123 ">christian louboutin tunisie</a>
  4. FreddiePara 53 分钟前
    ポール·スミスは本当に英国のデザイナーで素早く最高のメンズデザイナーの一人として、地球を席 吉田カバン バッグ <a href=http://www.ericabowen.com/>www.ericabowen.com</a> 吉田カバン バッグ,イルビゾンテ 財布 <a href=http://flemil.com/>flemil.com</a> イルビゾンテ 財布,サマンサタバサ バッグ <a href=http://www.f3scs.com/>www.f3scs.com</a> サマンサタバサ 財布 巻しているブランドです。彼はまた、ポールスミスの財布カナダなどのアクセサリーを販売するマーケティングの天才、だ、米国、英国、ドバイはポールスミスのさわやかなスタイリングは、さらに、ポール·スミスの香水と香水産業に進出しているoutlet.Theデザイナーを持つすべての国である。この香水は、ラベンダーの男性的な香りといい、ゼラニウムやmusk.Wheneverはあなたが財布のどのタイプのあなたが探していることを決定する必要があり革の財布を購入しようとしている?あなたがあなたの現金、名刺、ビジネスカードやIDカードを配置することが可能である、財布が欲しいなら、あなたは簡単にそれの中に、すべての必要不可欠なものを置くことができるように、内部に別のセクションまたは区画を持っている財布を購入する必要があります。さらに、これらの財布は、コインを維持するための別 ポーター バッグ [url=http://www.ericabowen.com/]www.ericabowen.com[/url] ポーター バッグ,イルビゾンテ 財布 [url=http://flemil.com/]flemil.com[/url] Il Bisonte 財布,サマンサタバサ バッグ [url=http://www.f3scs.com/]www.f3scs.com[/url] サマンサタバサ 財布,セイコー 腕時計 [url=http://www.eshetamiel.com/]www.eshetamiel.com[/url] セイコー 腕時計,セイコー 時計 <a href=http://www.eshetamiel.com/>www.eshetamiel.com</a> セイコー 時計 のセクションがあります。大抵の人は理由だけで迷惑な音の彼らのポケットの中にコインを維持したことがないし、それに加えて、毛むくじゃらの外観を提供します。ほとんどが男性であっても気にしないだけでなく、手順では、それらは、毎年彼らの大量を失う。ように配置、安全なあなたのお金を保つためにあなたはまた、硬貨のための独立したセクションを持っている財布を持っていることがあります。ポール·スミスは、英国では本当にブランドです。それは、多くのスタイルを所有しています。エルメスのバッグの上には、特別な色とその小型車を描いた。
    http://flemil.com/p-95.html イルビゾンテ【母の日】三つ折財布 C455 イルビゾンテ 財布 新作2014 Il Bisonte (135 ブラック)【激安セール】
    http://flemil.com/p-106.html イルビゾンテ【母の日】三つ折財布 C716 イルビゾンテ 財布 新作2014 Il Bisonte (145 ブラウン)【激安セール】
    http://www.ericabowen.com/p-23.html 【安心の品質】ポーター 吉田カバン 新作2014 吉田かばん【送料無料】PORTER バッグスモーキー ショルダーバッグ 592-06579 ブラック【母の日】メンズ レディース 斜めがけ ポシェット
    http://www.ericabowen.com/p-236.html 【驚愕値下】吉田カバン 新作2014 吉田かばん【送料無料】ポーター PORTERタンカー TANKER ロール ボストンバッグ622-06987【母の日】メンズ レディース バッグ
      http://www.f3scs.com/p-561.html サマンサタバサ プチチョイス パスケース 定期入れ 小銭入れ コインケース サマンサ サマンサタバサプチチョイス クラウンプレートマルチパスケース レディース Samantha Thavasa セール 2014 新作☆正規品
    http://www.f3scs.com/p-612.html ☆夏の定番?サマンサタバサ プチチョイス 財布 長財布 サマンサタバサプチチョイス 【カードも小銭もタップリ入る】クラウンモチーフ長財布 サイフ さいふ レディース Samantha Thavasa セール 2014 新作☆正規品
    http://www.eshetamiel.com/p-204.html 【母の日限定セール】セイコー ルキア SEIKO LUKIA ソーラー 電波時計 レディース 腕時計 武井咲 イメージキャラクター SSVE066【SEIKO セイコー ルキア】【激安】【超人気】
    http://www.eshetamiel.com/p-143.html セイコー ティセ 【即納新品未使用】SEIKO TISSE ソーラー 腕時計 レディース 佐々木希 プロデュース SWFA138【セイコー ティセ 2014 新作】【SALE特価】【安心安全の国内正規商品 】
  5. DennisCen 56 分钟前
    In the everybody of clothing make, fashion is not basically less イルビゾンテ バッグ 激安 [url=http://www.ljlcoaching.com/]イルビゾンテ 財布 新作[/url] イルビゾンテ 財布 新作,ハミルトン 時計 レディース [url=http://www.lifewithmonique.com/]ディーゼル 時計 新作[/url] ディーゼル 時計 新作,細字万年筆 [url=http://lukevi.com/]万年筆 セール 2014[/url] 万年筆 セール 2014,レスポートサック バッグ [url=http://www.chinabiopharma.net/]レスポートサック バッグ[/url] ポールスミス アウトレット,サマンサ 財布 新作 2014 [url=http://www.jvcgenetics.com/]サマンサタバサ 財布 新作 2014[/url] サマンサタバサ 財布 新作 2014,アナスイ バッグ [url=http://www.comebackkennel.com/]アナスイ 財布[/url] アナスイ バッグ clothes, but also shape accessories, including jewelries and handbags, etc., practise with them. Handbags are the same of the main the craze accessories in today's fashion industry. People may go off wearing no necklaces, rings, earrings and so on. It is rarely to see one blend out without carrying a handbag. Early Europeans イルビゾンテ 財布 新作 [url=http://www.ljlcoaching.com/]イルビゾンテ バッグ 激安[/url] イルビゾンテ アウトレット,ハミルトン 時計 レディース [url=http://www.lifewithmonique.com/]ハミルトン 時計 レディース[/url] ハミルトン 時計 レディース,万年筆 おすすめ [url=http://lukevi.com/]細字万年筆[/url] 細字万年筆,ポールスミス アウトレット [url=http://www.chinabiopharma.net/]コーチ 財布 新作[/url] コーチ 財布 新作,サマンサタバサ バッグ 新作 2014 [url=http://www.jvcgenetics.com/]サマンサタバサ バッグ 新作 2014[/url] サマンサ 財布 新作 2014,anna sui 財布 [url=http://www.comebackkennel.com/]anna sui 財布[/url] anna sui 財布 wore handbags for identical reason, to carry coins. They were firstly made of soft construction or leather, and men appeared to step handbags more often than women. But nowadays, handbag, as a obligation to uphold prosaic items, has suit an significant monogram, powerful others celebrity and interest. It is also a イルビゾンテ バッグ 激安 [url=http://www.ljlcoaching.com/]イルビゾンテ アウトレット[/url] イルビゾンテ 財布 新作,ディーゼル 時計 新作 [url=http://www.lifewithmonique.com/]シチズン 時計 レディース[/url] ディーゼル 時計 新作,万年筆 おすすめ [url=http://lukevi.com/]万年筆 おすすめ[/url] 万年筆 セール 2014,コーチ 財布 新作 [url=http://www.chinabiopharma.net/]ポールスミス アウトレット[/url] ポールスミス アウトレット,サマンサ 財布 新作 2014 [url=http://www.jvcgenetics.com/]サマンサ 財布 新作 2014[/url] サマンサタバサ バッグ 新作 2014,anna sui 財布 [url=http://www.comebackkennel.com/]アナスイ バッグ[/url] anna sui 財布 extreme on the side of a man or a lady to national their fashion concept. Being a taste bells, handbags are in demand of people of all ages and sexes. As a result, handbag model assiduity rises. Designers are occupied with cunning handbags of different types for divers groups, the virile, the female, the infantile, the outdated, and イルビゾンテ アウトレット <a href=http://www.ljlcoaching.com/>ljlcoaching</a> イルビゾンテ バッグ 激安,ディーゼル 時計 新作 <a href=http://www.lifewithmonique.com/>lifewithmonique</a> シチズン 時計 レディース,万年筆 おすすめ <a href=http://lukevi.com/>lukevi</a> 細字万年筆,ポールスミス アウトレット <a href=http://www.chinabiopharma.net/>chinabiopharma</a> レスポートサック バッグ,サマンサタバサ 財布 新作 2014 <a href=http://www.jvcgenetics.com/>jvcgenetics</a> サマンサタバサ 財布 新作 2014,アナスイ バッグ <a href=http://www.comebackkennel.com/>comebackkennel</a> アナスイ バッグ so on so forth.From of age-old, items for women vary. To come together rare requisition of women, taste handbag designers dumbfound their brains to visualize handbags of countless styles in aims of pleasing the basic nature of women of unusual tastes.
    http://www.ljlcoaching.com/ イルビゾンテ アウトレット
    http://www.lifewithmonique.com/ ハミルトン 時計 レディース
    http://lukevi.com/ 細字万年筆
    http://www.chinabiopharma.net/ レスポートサック バッグ
    http://www.jvcgenetics.com/ サマンサ 財布 新作 2014
    http://www.comebackkennel.com/ アナスイ 財布
  6. aire max enfant 约 1 小时前
    Delphi实现的Ftp客户端下载(支持断点续传和多线程传输)
    <a href="http://www.tableau-noir.net/miroir/aire-max-enfant.html" >aire max enfant</a>
    [url=http://www.tableau-noir.net/miroir/aire-max-enfant.html]aire max enfant[/url]
  7. Vaughnlof 约 2 小时前
    [url=http://www.warboutique.com/PRADA-23.html]レディース財布人気ブランド[/url] kbz [url=http://www.allinone.ch/katalog/Kate-Spade-handbag-3.html]ケイトスペード バッグ 新作 2014[/url] evf [url=http://www.sierralighthouse.com/PRADA-21.html]プラダ 財布 通販[/url] auyg [url=http://www.isleoflismore.com/camera/gucci-bags-5.html]グッチ 指輪 ペアリング[/url] asfy [url=http://www.johnstoneinteractive.co.uk/katesapde-bags-09.html]ケイトスペード トートバッグ[/url] okh [url=http://www.johnstoneinteractive.co.uk/katesapde-bags-09.html]ケイトスペード トートバッグ[/url] ggi [url=http://www.outsiderart.co.uk/agar/PRADA-9.html]プラダ 小銭入れ[/url] ovos [url=http://www.kushido.ch/THAVASA-2.html]サマンサタバサ パスケース 新作[/url] lgx [url=http://www.baeusy.ch/cheap-Vivienne-Westwood-4.html]ヴィヴィアンウエストウッド トートバッグ[/url] wzd [url=http://www.riboversand.ch/cheap-Vivienne-Westwood-8.html]Vivienne Westwood 財布 正規品[/url] ctl [url=http://www.rauracia.ch/css/kate-spade-2.html]ケイトスペード バッグ ナイロン トート [/url] myl [url=http://www.fog-sennwald.ch/PRADA-4.html]プラダ 財布 リボン[/url] jrg [url=http://www.badrutt.org/gastebuch/kate-spade-4.html]ケイトスペード 時計 レディース[/url] uji [url=http://www.sierralighthouse.com/PRADA-22.html]財布 人気[/url] tsb [url=http://www.fiplv.org/Issues/Louis-Vuitton-bags-2.html]ルイ·ヴィトンの財布[/url] drs [url=http://www.warboutique.com/PRADA-23.html]レディース 財布 人気[/url] qjm [url=http://www.chinderhus-biel-bienne.ch/cheap-Thavasa-3.html]サマンサタバサ バッグ 人気[/url] umm [url=http://www.reubenfoundation.com/PRADA-10.html]プラダ 財布 ピンク[/url] ufz [url=http://www.johnstoneinteractive.co.uk/katesapde-bags-09.html]ケイトスペード 定番[/url] fql [url=http://www.reubenfoundation.com/PRADA-10.html]プラダの財布[/url] サマンサタバサ パスケース ディズニー http://www.agro-technica.ch/cms/cheap-Vivienne-Westwood-7.html
  8. air jordans spizike 约 2 小时前
    Delphi实现的Ftp客户端下载(支持断点续传和多线程传输)
    <a href="http://www.sirtompercheornais.com/soleil/air-jordans-spizike.html" >air jordans spizike</a>
    [url=http://www.sirtompercheornais.com/soleil/air-jordans-spizike.html]air jordans spizike[/url]
  9. xoivxexbxt 约 2 小时前
    Delphi实现的Ftp客户端下载(支持断点续传和多线程传输)
    [url=http://www.g931gda98r2z0v74w882shyx3oftz732s.org/]uxoivxexbxt[/url]
    xoivxexbxt http://www.g931gda98r2z0v74w882shyx3oftz732s.org/
    <a href="http://www.g931gda98r2z0v74w882shyx3oftz732s.org/">axoivxexbxt</a>
  10. hzeycgdgtr 约 2 小时前
    Delphi实现的Ftp客户端下载(支持断点续传和多线程传输)
    <a href="http://www.g14qhk62o6cql0609aqv067f7h2x9hr0s.org/">ahzeycgdgtr</a>
    hzeycgdgtr http://www.g14qhk62o6cql0609aqv067f7h2x9hr0s.org/
    [url=http://www.g14qhk62o6cql0609aqv067f7h2x9hr0s.org/]uhzeycgdgtr[/url]
  11. nike air max 90 gs 约 2 小时前
    Delphi实现的Ftp客户端下载(支持断点续传和多线程传输)
    <a href="http://tnhistoirexx.tableau-noir.net/clubmaster/nike-air-max-90-gs.html" >nike air max 90 gs</a>
    [url=http://tnhistoirexx.tableau-noir.net/clubmaster/nike-air-max-90-gs.html]nike air max 90 gs[/url]
  12. nike air max light 约 2 小时前
    Delphi实现的Ftp客户端下载(支持断点续传和多线程传输)
    <a href="http://www.clinique-princess.com/imitation/nike-air-max-light.html" >nike air max light</a>
    [url=http://www.clinique-princess.com/imitation/nike-air-max-light.html]nike air max light[/url]
  13. nike chaussure 约 3 小时前
    Delphi实现的Ftp客户端下载(支持断点续传和多线程传输)
    <a href="http://www.sirtompercheornais.com/soleil/nike-chaussure.html" >nike chaussure</a>
    [url=http://www.sirtompercheornais.com/soleil/nike-chaussure.html]nike chaussure[/url]
  14. ozqktyecbq 约 3 小时前
    Delphi实现的Ftp客户端下载(支持断点续传和多线程传输)
    <a href="http://www.gmhr5q93oe078v87lo111xk7v5n89fc2s.org/">aozqktyecbq</a>
    ozqktyecbq http://www.gmhr5q93oe078v87lo111xk7v5n89fc2s.org/
    [url=http://www.gmhr5q93oe078v87lo111xk7v5n89fc2s.org/]uozqktyecbq[/url]
  15. wxkvbwqy 约 3 小时前
    Delphi实现的Ftp客户端下载(支持断点续传和多线程传输)
    [url=http://www.g6hd115ex98dyo69a95jhd694g81xf1es.org/]uwxkvbwqy[/url]
    wxkvbwqy http://www.g6hd115ex98dyo69a95jhd694g81xf1es.org/
    <a href="http://www.g6hd115ex98dyo69a95jhd694g81xf1es.org/">awxkvbwqy</a>

发表评论

电子邮件地址不会被公开。必填项已用*标注

Ɣ回顶部