因爲delphi自己自帶了indy控件,所以用這些控件實現網絡編程即快又容易。儘管如此,我仍是極大地鼓勵本身查看FTP底層是如何實現的,但就目前而言,indy控件仍是一個很是不錯的選擇。
針對indy的強大,我仍是決定將這段代碼帖出來,主要是方便本身往後複習、查詢。
Unit1;編程
interfacewindows
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdFTP;服務器
type
TForm1 = class(TForm)
IdFTP1: TIdFTP;
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
Button2: TButton;
Label1: TLabel;
Button3: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: String);
private
{ Private declarations }
public
{ Public declarations }
end;網絡
var
Form1: TForm1;測試
implementation
uses IdFTPList, IdFTPCommon;
{$R *.dfm}
{
本程序是一個ftp demo程序,我用windows信息服務在本機創建了一個ftp服務,
本機IP:192.168.10.99
用戶名:cc
密碼:1
}orm
procedure TForm1.Button1Click(Sender: TObject);
var
tr : Tstrings;
begin //鏈接
tr := TStringlist.Create;
IdFTP1.Host := '192.168.10.99'; //FTP服務器IP地址or域名也能夠
IdFTP1.Username := 'username'; //FTP服務器用戶名
IdFTP1.Password := 'password'; //FTP服務器密碼文檔
IdFTP1.Connect(); //鏈接到ftpstring
Edit1.Text := IdFTP1.RetrieveCurrentDir;//獲得初始目錄
IdFTP1.ChangeDir('client'); //進入到client子目錄
//IdFTP1.ChangeDir('..'); //回到上一級目錄
IdFTP1.List(tr); //獲得client目錄下全部文件列表
Memo1.Lines.Assign(tr);
tr.Free;
end;網絡編程
procedure TForm1.Button2Click(Sender: TObject);
var
tt :TIdFTPListItems;
t : TIdFTPListItem;
i : integer;
tfname : String;
begin //下載
Label1.Caption := IdFTP1.DirectoryListing.Items[0].FileName;
IdFTP1.TransferType := ftBinary; //指定爲二進制文件 或文本文件ftASCII
for i:=0 to IdFTP1.DirectoryListing.Count-1 do
begin
tt := IdFTP1.DirectoryListing; //獲得當前目錄下文件及目錄列表
t := tt.Items[i]; //獲得一個文件相關信息
Label1.Caption :=t.Text; //取出一個文件信息內容
tfname := t.FileName;
showmessage(t.OwnerName+' '+t.GroupName+' '+t.FileName+' '+t.LinkedItemName);
if IdFTP1.DirectoryListing.Items[i].ItemType = ditFile then //若是是文件
begin
IdFTP1.Get(tfname,'d:\FTPtest\'+tfname,True,True); //下載到本地,併爲覆蓋,且支持斷點續傳
end;
end;
end;域名
procedure TForm1.Button3Click(Sender: TObject);
var
fi : string;
begin //上傳
if OpenDialog1.Execute then
begin
fi := OpenDialog1.FileName;
IdFTP1.Put('f:\測試文檔樣本.rar','測試文檔樣本.rar');//上傳,
end;
end;
procedure TForm1.IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: String);
begin
{case AStatus of
hsResolving : showmessage('hsResolving');
hsConnecting: showmessage('hsConnecting');
hsConnected: showmessage('hsConnected');
hsDisconnecting: showmessage('hsDisconnecting');
hsDisconnected: showmessage('hsDisconnected');
hsStatusText: showmessage('hsStatusText');
ftpTransfer: showmessage('文件傳送完畢。');
ftpReady: showmessage('準備傳送文件....');
ftpAborted: showmessage('傳送失敗');
end; }
//showmessage(AStatusText);
end;
end.