FTP代表文件傳輸協議,文件傳輸協議是通過互聯網連接兩台電腦之間的文件傳輸系統,其中一台電腦被稱為服務器,而另一台是客戶端。 FTP程序非常有用 ,它通常用於網站管理。網站管理員可以很容地把更新的本地文件上傳到Web服務器,傳輸速度比網頁瀏覽器更快。對於普通電腦用戶,他們也可以使用FTP程序下載文件。FTP網站提供很多有用的東西,如免費軟件,免費游戲,產品信息,應用程序,工具,實用程序,驅動程序,修補程序等等。
FTP通常包括一個顯示本地電腦和遠程服務器的目錄的界面。文件可以通過點擊相關的箭頭來傳輸。要登錄到FTP站點,我們必須輸入用戶名和密碼,然而,對於公共領域,我們只需要鍵入單詞匿名用戶名就可以來。 FTP 主機名是ftp.servername.com,例如,微軟FTP站點的主機名為ftp.microsoft.com。如果你需要一個FTP軟件,你可以購買或者下載互聯網上免費提供的軟件。但是,您也可以應用Visual Basic創建你自己的FTP軟件。 Visual Basic允許你建立一個全功能的FTP程式。
在這個工程裡我們需插入兩個表單,Form1 和 Form2。在屬性頁裡把Form1名改為frmLogin ,而Form2 名則改為frmFTP。 frmLogin 是用來作為登錄FTP伺服器而frmFTP則是作為FTP主界面。FTP 背后的引擎是Microsoft Internet Transfer Control 6.0 ,我們要將其插入到frmLogin表單裡。 Microsoft Internet Transfer Control 6.0 的名字是Inet,如果你只有一個控件,其名稱將是Inet1。inet1含有三個重要的屬性,即Inet1.URL,用於識別FTP的主機名,inet1.UserName是用於接受用戶名而inet1.Password則用於接受用戶的密碼。再下來我們插入三個文本框,把它們·命名為TxtURL, TxtUserName 和TxtPassword。frmLogin 的設計界面如下:
圖33.1:FTP登錄界面
至於frmFTP的表單裡我們需要插入三個文本框,第一個用來展示遠程目錄及文件,第二個用來選擇你要下載的本地文件夾而最后一個則用來選擇你要下載的文件。你可把它們命名為TxtDir,TxtFolder及TxtFile. 其設計界面如下:
圖33.2:FTP主界面
33.2 編寫登錄菜單的代碼
用來作為登錄菜單的表單是frmLogin。在這個程式裡,TxtURL用來讀取主機伺服器網址,TxtUserName用來讀取用戶名而TxtPassword則用來讀取用戶密碼,語句如下。
Inet1.URL=TxtURL.Text
Inet1.UserName=TxtUserName.Text
Inet1.Passoword=TxtPassword.Text
用戶輸入上述信息后,此程序會嘗試使用以下的命令連接到服務器。其中Execute方法和DIR則是FTP讀取遠程電腦的指定目錄下的文件列表命令。最后,你需要使用GetChunk方法去讀取目錄的信息。
Inet1.Execute, "DIR“
在連接到服務器時,您可以使用下面的語句從遠程計算機下載文件:
Inet1.Execute, , "get" & remotefile & localfile
其中remotefile是在遠程伺服器的文件而 localfile 則是本地文件。然而,有很多時候你需要提供本地文件的完整路徑,其語法如下:
Inet1.Execute , , "get" & remotefile & localpath & remotefile
上面的語句將確保遠程文件將被下載到localpath 指定的位置及下載的文件和遠程文件保持相同名稱。例如,如果遠程文件readme.txt和LocalPath為C:\temp,下載的文件將被保存在C:\temp\readme.txt.
為了監測連接狀態,你可以使用StateChanged與Inet1相關的事件,連同一組下表中所列出的狀態常數。
狀態 |
值 |
說明 |
icHostResolvingHost |
1 |
控件指定的主機的IP地址。 |
icHostResolved |
2 |
控件成功地找到指定的主機的IP地址。 |
icConnecting |
3 |
控件正在連接到主機。 |
icConnected |
4 |
控件成功地連接到主機。 |
icRequesting |
5 |
控件發送請求給主計算機。 |
icRequestSent |
6 |
控件成功發送請求。 |
icReceivingResponse |
7 |
控件接收到主計算機的響應。 |
icResponseReceived |
8 |
控件從主機成功接收到響應。 |
icDisconnecting |
9 |
控件與主機切斷連接。 |
icDisconnected |
10 |
控件成功與主機切斷連接。 |
icError |
11 |
與主機通信時發生錯誤。 |
icResponseCompleted |
12 |
請求已經完成,並已收到所有數據。 |
在StateChanged事件裡,您可以使用 Select Case…End Select 陳述句來通知用戶有關各種連接的狀態。登錄菜單代碼如下:
Private Sub OKButton_Click()
Inet1.URL = TxtURL.Text
Inet1.UserName = TxtUsername.Text
Inet1.Password = TxtPassword.Text
Inet1.Execute , "DIR"
frmFTP.Show
Me.hide
End Sub
Private Sub Inet1_StateChanged(ByVal State As Integer)
Select Case State
Case icError
MsgBox Inet1.ResponseInfo, , "文件傳輸失敗"
Case icResolvingHost
Label6.Caption = "解析主機"
Case icHostResolved
Label6.Caption = "已經解析了主機"
Case icConnecting
Label6.Caption = "正在連接主機"
Case icConnected
Label6.Caption = "成功連接主機"
Case icReceivingResponse
Label6.Caption = "正在接收響應"
Case icResponseReceived
Label6.Caption = "已經得到響應"
Case icResponseCompleted
Dim data As String
Dim data1 As String
MsgBox "下載完成"
Do
data1 = Inet1.GetChunk(1024, icString)
data = data & data1
Loop While Len(data1) <> 0
frmFTP.TxtDIR.Text = data
End Select
End Sub
Private Sub CancelButton_Click()
TxtURL.Text = ""
TxtUsername.Text = ""
TxtPassword.Text = ""
End Sub
聲明 data1= Inet1.GetChunk(1024,icString)是使用GetChunk方法來獲取信息的遠程目錄,然后在frmFTP表單上的文本框TxtDIR裡顯示該文件的目錄。因為TxtDIR 是在frmFTP表單裡,所以需要用 frmFTP.TxtDIR.Text = data來讀取資料。
登錄后,FTP程式將試圖和遠程伺服器溝通,你會看到各種狀態,如”正在接收響應“,界面如圖33.3所示。
33.3 FTP主菜单的程式碼
下載文件的程式碼如下:
Private Sub cmdDownload_Click()
Dim remotefile As String
Dim mypath As String
Dim cmd As String
remotefile = TxtFile.Text
mypath = TxtFolder.Text
cmd = "GET " & remotefile & " " & mypath & remotefile
frmLogin.Inet1.Execute , cmd ’我们用frmLogin.Inet1.Execute來表示Inet1是屬于frmLogin表單
End Sub
取消下載的程式碼如下:
Private Sub cmdCancel_Click()
frmLogin.Inet1.Cancel
End
End Sub
成功登錄后,你將可瀏覽遠程伺服器的目錄及文件,然后你可下載你需要的文件。界面如圖33.4所示
登錄后,FTP程式將試圖和遠程伺服器溝通,你會看到各種狀態,如”正在接收響應“,界面如圖33.3所示。
圖33.4:FTP界面