FTP代表文件传输协议,文件传输协议是通过互联网连接两台电脑之间的文件传输系统,其中一台电脑被称为服务器,而另一台是客户端。 FTP程序非常有用,它通常用于网站管理。网站管理员可以很容易地把更新的本地文件上传到Web服务器,传输速度比网页浏览器更快。 对于普通电脑用户,他们也可以使用FTP程序下载文件。 FTP网站提供很多有用的东西,如免费软件,免费游戏,产品信息,应用程序,工具,实用程序,驱动程序,修补程序等等。
FTP通常包括一个显示本地电脑和远程服务器的目录的界面。文件可以通过点击相关的按钮来传输。要登录到FTP站点,我们必须输入用户名和密码,然而,对于公共领域,我们只需要键入单词匿名用户名就可以来。 FTP 主机名是ftp.servername.com,例如,微软FTP站点的主机名为ftp.microsoft.com。如果你需要一个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。FTP 登录页frmLogin 的设计界面如下:
至于frmFTP的表单中我们需要插入三个文本框,第一个用来展示远程目录及文件,第二个用来选择你要下载的本地文件夹而最后一个则用来选择你要下载的文件。你可把它们命名为TxtDir,TxtFolder及TxtFile. 其设计界面如下:
用来作为登录菜单的表单是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所示。
下载文件的程序代码如下:
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所示:
图33.4:FTP界面