利用VB实现FTP基本功能

更新时间:2024-06-28 11:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课程设计任务书

题 目: FTP文件传输的实现 初始条件:

理论:学完“操作系统”和“计算机网络”课程,掌握一种高级程序设计语言(C++、

C#、Java、Delphi)及集成开发平台的使用。

实践:计算机学院科学系实验中心提供计算机、软件平台和网络环境。如果自己

有计算机可以在其上进行设计。

要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

(1) 模仿应用FTP协议。

(2)主要功能: 1支持站点目录和文件结构浏览。

2支持断线自动重新连接并自动恢复传输。

3文件列表过滤,远程编辑,整个远端目录删除,目录上传下载。

(3)应用所学计算机网络课程中的知识,利用网络实用程序实现其协议。

(4)编制好网络实用程序后,设计若干用例,上机测试并分析所设计的程序。 (5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:

设计题目;需求说明(要求、功能简述)或问题描述; 设计说明(简要的分析与概要设计);详细的算法描述; 源程序与执行结果(含测试方法和测试结果);使用说明; 设计心得(设计的特点、不足、收获与体会); 展望(该实用程序进一步改进扩展的设想)。

时间安排:

设计时间一周: 周1:查阅相关资料。

周2:系统分析,设计。 周3周4:编程并上机调试 周5:撰写课程设计报告。

设计验收安排:19周星期五8:00起到计算机学院科学系实验中心进行上机验收。 设计报告书收取时间:19周的星期五下午5:00之前。

指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日

武汉理工大学《计算机网络》课程设计说明书

FTP文件传输的实现

1设计题目

FTP文件传输的实现

2需求说明(要求、功能简述)或问题描述

2.1 FTP概念和传输原理

FTP是Internet上使用非常广泛的一种通讯协议。它是由支持Internet文件传输的各种规则所组成的集合,这些规则使 Internet用户可以把文件从一个主机拷贝到另一个主机上,因而为用户提供了极大的方便和收益。

FTP和其它Internet服务一样,也是采用客户机/服务器方式。使用方法很简单,启动FTP客户端程序先与远程主机建立连接,然后向远程主机发出传输命令,远程主机在收到命令后就给予响应,并执行正确的命令。FTP有一个根本的限制,那就是,如果用户未被某一FTP主机授权,就不能访问该主机,实际上是用户不能远程登录(Remote Login)进入该主机。也就是说,如果用户在某个主机上没有注册获得授权,没有用户名和口令,就不能与该主机进行文件的传输。而Anonymous FTP则取消了这种限制。

FTP支持两种模式,一种方式叫做Standard(也就是PORT方式,主动方式),一种是Passive (也就是PASV,被动方式)。Standard模式FTP的客户端发送PORT命令到FTP服务器。Passive模式FTP的客户端发送PASV命令到FTPServer。Port模式FTP客户端首先和FTP服务器的TCP21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。

FTP可用多种格式传输文件,通常由系统决定,大多数系统(包括UNIX系统)只有两种模式:文本模式(ASCII)和二进制模式(BIN/IMAGE)。

1

武汉理工大学《计算机网络》课程设计说明书

简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为下载文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为上载文件。在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。

FTP(非匿名)必须要有4要素:FTP主机地址,端口号,用户名,密码。

2.2 需求说明

完成两台计算机之间的拷贝,实现文件的上传和下载; 支持站点目录和文件结构浏览;

文件列表过滤,远程编辑,整个远端目录删除; 支持断线自动重新连接并自动恢复传输。

3设计说明(简要的分析与概要设计)

采用VB编程,通过建立一系列的窗体模块,程序模块,类模块编制一个小的应用软件。该软件的功能是当程序运行成功后,用户可以选择任意的FTP主机地址进行登陆。当选择是匿名的FTP主机地址时,选择anonymous复选框,这时只需要输入FTP主机地址就可以登陆,此时用户名为anonymous,密码为Emai1地址,以便更好地对用户访问进行跟综。如果不是匿名登陆,则取消选择anonymous复选框,这时要输入用户名和密码,一个用户名对应了一个访问的权限。

通过WINSOCK建立连接,将信息发送到远程的ftp服务器主机上,实现用户的登陆。 当用户成功登陆后,远程FTP主机的文件就全部列在frmMain窗体左侧的TreeView控件中,当点机TreeView控件中的文件夹时,相应的文件夹中的文件就列在右侧的ListView控件中,并且显示文件的图标,大小和最近的访问日期。显示的方式可以通过点击工具栏中的图标来设置,文件可以以大图标的形式显示,也可以以小图标的形式显示。

当用户选择了远程的某一个文件后,可以点击工具栏上的下载,删除,重命名图标来实现对远程文件的操作。但实际上大多数FTP主机为了安全采取了一些保护措施以保护自己的文件。除非你有特殊的权限,否则不能对文件进行修改和删除。但是大多数匿名FTP主机都允许用户从其下载文件。

用户也可以在本地选择文件上传到FTP服务器主机,大多数用户不能将自己机器上的任何一个文件拷贝至匿名FTP主机上。即使有些匿名FTP主机确实允许用户上载文件,用户也只能将文件上载至某一指定上载目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另一个公共下载目录中,供其他用户下载,利用这种方式,远程主机的用

2

武汉理工大学《计算机网络》课程设计说明书

户得到了保护,避免了有人上载有问题的文件,如带病毒的文件。因此要实现文件的上传,还需选择一个特殊的可以用户上传文件的FTP服务器主机地址。

4详细的算法描述

开 始 用户选择文件传输模式 用户选择与FTP服务器连接 Y 匿名FTP服务器? 输入用户名和密码 N 输入FTP服务器地址 点击连接,与FTP服务器连接 N 连接成功? Y 根据错误代码进行调试 进行文件的上传,下载,修改,重命名等操作 N 操作成功? Y N 退 出? Y 断 开 连 接

3

出 错 处 理 武汉理工大学《计算机网络》课程设计说明书

5 源程序与执行结果(含测试方法和测试结果)

5.1原程序部分

5.1.1 frmMain 窗体的部分代码

Const NAME_COLUMN = 0 Const TYPE_COLUMN = 1 Const SIZE_COLUMN = 2 Const DATE_COLUMN = 3

Private Declare Function LockWindowUpdate Lib \(ByVal hwndLock As Long) As Long

Dim mbMoving As Boolean '定义是否鼠标按下 Const sglSplitLimit = 500 '定义最小的分割距离 Private m_LastNode As Node

Private WithEvents m_FtpConnection As CFtpConnection Private m_strFile As String Private m_lFileSize As Long Private Sub Check1_Click() If Check1.Value Then

m_FtpConnection.PassiveMode = True Else

m_FtpConnection.PassiveMode = False End If End Sub

Private Sub CoolBar1_HeightChanged(ByVal NewHeight As Single) SizeControls picSplitter.Left End Sub

Private Sub Form_Load()

Me.Left = GetSetting(App.Title, \是当前程序的标题 Me.Top = GetSetting(App.Title, \\1000) '表示读取注册表中关于App.Title所指的应用程序中Settings注册表目录下的MainTop变量的值,如果没有找到这

4

武汉理工大学《计算机网络》课程设计说明书

个注册表变量则,默认为1000

Me.Width = GetSetting(App.Title, \ Me.Height = GetSetting(App.Title, \ Set m_FtpConnection = New CFtpConnection m_FtpConnection.Timeout = 180 End Sub

Private Sub Form_Unload(Cancel As Integer) Dim i As Integer

Set m_FtpConnection = Nothing 'close all sub forms For i = Forms.Count - 1 To 1 Step -1 '卸载所有窗体 Unload Forms(i) Next

SaveSetting App.Title, \End Sub

Private Sub m_FtpConnection_StateChanged(State As FTP_CONNECTION_STATES) Dim strStatus As String Select Case State

Case FTP_CONNECTION_RESOLVING_HOST strStatus = \

Case FTP_CONNECTION_HOST_RESOLVED strStatus = \

Case FTP_CONNECTION_CONNECTED strStatus = \

Case FTP_CONNECTION_AUTHENTICATION strStatus = \ Case FTP_USER_LOGGED

strStatus = \ Case FTP_ESTABLISHING_DATA_CONNECTION strStatus = \

5

武汉理工大学《计算机网络》课程设计说明书

Case FTP_DATA_CONNECTION_ESTABLISHED strStatus = \ Case FTP_RETRIEVING_DIRECTORY_INFO strStatus = \ Case FTP_DIRECTORY_INFO_COMPLETED strStatus = \ Case State = FTP_TRANSFER_STARTING strStatus = \ Case FTP_TRANSFER_COMLETED strStatus = \ ProgressBar1.Value = 0.01 m_lFileSize = 0 End Select

sbStatusBar.Panels(1).Text = strStatus End Sub

Private Sub imgSplitter_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

With imgSplitter 'imgSplitter为image(图片)控件 picSplitter.Move .Left, .Top, .Width \\ 2, .Height - 20 End With

picSplitter.Visible = True mbMoving = True

LockWindowUpdate Me.hwnd '指将句柄为Handle的窗体锁定,不能更新。 End Sub

Private Sub m_FtpConnection_UploadProgress(lBytes As Long) On Error Resume Next

sbStatusBar.Panels(1).Text = \ ProgressBar1.Value = lBytes / (m_lFileSize / 100) End Sub

6

武汉理工大学《计算机网络》课程设计说明书

Private Sub mnuConnect_Click() Call EstablishConnection End Sub

Private Sub mnuDelete_Click() Dim intRetVal As Integer Dim strFileName As String On Error GoTo ERROR_HANDLER

strFileName = tvTreeView.SelectedItem.Key & lvListView.SelectedItem.Text

intRetVal = MsgBox(\you really want to delete file \& strFileName & \vbYesNoCancel, \ If intRetVal = vbYes Then

If m_FtpConnection.DeleteFile(strFileName) Then

ListFiles tvTreeView.SelectedItem '返回最近选中的项目 Else

MsgBox \ \

m_FtpConnection.GetLastServerResponse, , _ \ End If End If Exit Sub ERROR_HANDLER: If Err = 91 Then

MsgBox \ Else

MsgBox \ vbInformation, \ End If End Sub

7

武汉理工大学《计算机网络》课程设计说明书

Private Sub mnuDownload_Click() Call DownloadFile End Sub

Private Sub mnuFile_Click() With m_FtpConnection

mnuDownload.Enabled = Not .Busy mnuUpload.Enabled = Not .Busy End With End Sub

Private Sub mnuHelp_Click()

mnuHelpAbout.Enabled = Not m_FtpConnection.Busy End Sub

Private Sub mnuListViewMode_Click(Index As Integer) Select Case Index '当鼠标点击工具栏的view菜单时

Case 0 lvListView.View = lvwIcon '显示大图标的情况 Case 1 lvListView.View = lvwSmallIcon '显示小图标的情况 Case 2 lvListView.View = lvwList '只显示列表

Case 3 lvListView.View = lvwReport '显示文件大小和日期 End Select

tbToolBar.Buttons(15 + Index).Value = tbrPressed End Sub

Private Sub tbToolBar_ButtonClick(ByVal Button As MSComctlLib.Button) 'ByRef是VB默认的参数传递方式,如果指定传递的是参数的值要使用关键字ByVal Dim strTemp As String On Error Resume Next Select Case Button.Key Case \

Call EstablishConnection Case \

8

武汉理工大学《计算机网络》课程设计说明书

Set tvTreeView.SelectedItem = tvTreeView.SelectedItem.Parent strTemp = tvTreeView.SelectedItem.FullPath

strTemp = Mid$(strTemp, InStr(1, strTemp, \返回某一字符串从另一字符串的右侧开始算起第一次出现的位置

If m_FtpConnection.SetCurrentDirectory(strTemp) Then ListFiles tvTreeView.SelectedItem End If Case \

If Not m_FtpConnection.CloseConnection Then If

m_FtpConnection.FtpGetLastError

=

ERROR_FTP_USER_TRANSFER_IN_PROGRESS Then Dim intRetVal As Integer

intRetVal = MsgBox(\the data transfer?\ If intRetVal = vbYes Then

m_FtpConnection.CancelTransfer End If End If End If Case \

Call RefreshDirectory Case \ mnuDownload_Click Case \ mnuUpload_Click Case \ mnuCreateDir_Click Case \ mnuDelete_Click

9

武汉理工大学《计算机网络》课程设计说明书

Case \ mnuRename_Click Case \ lvListView.View = lvwIcon Case \

lvListView.View = lvwSmallIcon Case \

lvListView.View = lvwList Case \

lvListView.View = lvwReport End Select End Sub

Private Sub mnuFileClose_Click() 'unload the form Unload Me End Sub

Public Function FormatFileSize(lFileSize As Long) As String On Error GoTo ERROR_HANDLER If lFileSize >= 1024 Then

FormatFileSize = Format$(CStr(lFileSize / 1024), \### ### KB\'CStr 转换为String类型 Else

FormatFileSize = CStr(lFileSize) & \ End If Exit Function ERROR_HANDLER:

Debug.Print Err.Number & \End Function

Private Sub tvTreeView_DragDrop(Source As Control, x As Single, y As Single) 'source只正在

10

武汉理工大学《计算机网络》课程设计说明书

被拖动的控件,x,y指鼠标指针在目标对象中的坐标值 If Source = imgSplitter Then SizeControls x End If End Sub

Private Sub AddFileToListView(oFtpFile As CFtpFile) Dim intIcon As Integer Dim strFileName As String strFileName = oFtpFile.FileName intIcon = GetImageNumber(strFileName)

Set lvItem = lvListView.ListItems.Add(, strFileName, strFileName, intIcon, intIcon) lvItem.SubItems(1) = oFtpFile.FileSize lvItem.SubItems(2) = oFtpFile.LastWriteTime End Sub

Private Sub RefreshDirectory()

With tvTreeView.SelectedItem '从treeview中移除所有subfolders If .Children > 0 Then For i = 1 To .Children

tvTreeView.Nodes.Remove (.Child.Index) Next i End If

lvListView.ListItems.Clear ListFiles tvTreeView.SelectedItem End With End Sub

Private Sub EstablishConnection() Dim tvNode As Node Dim f As New frmConnect

f.Show vbModal '显示连接窗体的内容

11

武汉理工大学《计算机网络》课程设计说明书

If f.Action = comdOK Then '当按下OK时,清空treeview和listview的内容 tvTreeView.Nodes.Clear lvListView.ListItems.Clear With m_FtpConnection .FtpServer = f.URL .UserName = f.UserName .Password = f.Password

.PassiveMode = CBool(Check1.Value) 'call Connect method If .Connect Then Label1 = f.URL

'add root node to the treeview

Set tvNode = tvTreeView.Nodes.Add(, , , .CurrentDirectory, 1) tvNode.Key = .CurrentDirectory Set tvTreeView.SelectedItem = tvNode ListFiles tvNode, True End If '.Connect End With 'm_FtpConnection End If 'f.Action = comdOK End Sub

5.2.2 frmconnect窗体的部分代码

Public Property Get UserName() As String UserName = mvarUserName End Property

Public Property Get Password() As String Password = mvarPassword End Property

Public Property Get URL() As String URL = mvarURL

12

武汉理工大学《计算机网络》课程设计说明书

End Property

Private Sub chkAnonym_Click() If chkAnonym.Value Then txtUserName = \ txtPassword.PasswordChar = \ txtPassword = \ Frame3.Caption = \Else txtUserName = \

txtPassword.PasswordChar = \ txtPassword = \

Frame3.Caption = \End If End Sub

Private Sub cmdCancel_Click() mvarAction = comdCancel Unload Me End Sub

Private Sub cmdOK_Click() If Len(txtURL) = 0 Then

MsgBox \URL\ Exit Sub

Else mvarURL = LCase(txtURL.Text) End If

If Len(txtUserName.Text) = 0 Then mvarUserName = vbNullString

Else mvarUserName = txtUserName.Text End If

If Len(txtPassword.Text) = 0 Then

13

武汉理工大学《计算机网络》课程设计说明书

mvarPassword = vbNullString Else mvarPassword = txtPassword.Text End If

mvarAction = comdOK Unload Me End Sub

Public Property Let Action(ByVal vData As Command) mvarAction = vData End Property

Public Property Get Action() As Command

'used when retrieving value of a property, on the right side of an assignment. 'Syntax: Debug.Print X.Action Action = mvarAction End Property

5.2 运行结果

5.2.1 开始界面(见图一)

(图一)

14

武汉理工大学《计算机网络》课程设计说明书

5.2.2 用户点击file->connect to 或工具栏上的连接后的界面(见图二)

(匿名方式)

(非匿名)(图二)

5.2.3用户与ftp服务器主机地址ftp://vip:vip88@202.118.167.160 连接成功的界面(见图三)

(图三)

15

武汉理工大学《计算机网络》课程设计说明书

分析: 220 Serv-U FTP Server v6.1 for WinSock ready .. 表示服务就绪 ;

USER vip表示用户名字为vip; 331 User name okay, need password...表示用户名正确,需要口令;

PASS vip88表示用户的密码为vip88;

230 User logged in, proceed. 表示用户已经注册完毕; 257 \表示路径已建立; PORT 192,168,18,128,4,76 表示当前客户端的IP为192.168.18.128 ,端口号为4*256+76=1100; 200 PORT Command successful. 表示命令执行正常结束; 150 Opening ASCII mode data connection for /bin/ls 表示文件状态正确,正在打开数据连接; 226 Transfer complete表示正在关闭数据连接。请求文件动作成功结束(例如,文件传送或终止); 在左侧列的是远程服务器提供给用户共享的文件夹,右侧列的是文件夹所包含的文件,并列出文件的图标,大小和最近更改日期。

5.2.4用户从ftp主机上下载文件,保存到本地的subject文件夹中(见图四)

(图四)

16

武汉理工大学《计算机网络》课程设计说明书

5.2.5文件下载成功:(见图五)

(图五)

6 使用说明

6.1 界面使用说明

(图六)

如图六,从左到右的功能依次为建立连接,返回上一级 ,停止文件传输,刷新,下载,上传,create new directory,删除文件,重命名,显示大图标,显示小图标,显示列表,显示详细信息。 同时用户也可以在文件菜单中执行相关的操作。

6.2 代码的对应含义说明

120服务在NNN时间内可用;

125数据连接已经打开,开始传送数据; 150文件状态正确,正在打开数据连接; 200命令执行正常结束;

202命令未被执行,此站点不支持此命令; 211系统状态或系统帮助信息回应; 212目录状态信息;

214关于如何使用本服务器或特殊的非标准命令。此回复只对人有用; 220 新连接的用户的服务已就绪;

225数据连接已打开,没有进行中的数据传送;

17

武汉理工大学《计算机网络》课程设计说明书

226正在关闭数据连接。请求文件动作成功结束(例如,文件传送或终止); 227进入被动模式

331用户名存在,需要输入密码;

350对被请求文件的操作需要进一步更多的信息; 421 太多用户,那就过会再连 ;

426连接关闭,传送中止。 你的防火墙限制你FTP的传输,请关闭你个人电脑上的防火墙; 550请求操作未被执行,文件不可用;

553 请求操作未被执行。 文件名不允许;

7设计心得(设计的特点、不足、收获与体会)

7.1设计的特点

7.1.1 本次课程设计不仅可以实现匿名ftp服务器的访问,还可以实现非匿名ftp服务器

的访问。只要在连接界面取消选择anonymous复选框就可以实现非匿名ftp服务器的访问。

7.1.2 本次课程设计可以实现远程站点的目录和文件结构的浏览。如果是非匿名的ftp

服务,用户还可以申请属于自己的ftp并实现文件的删除,重命名和上传操作。

7.1.3 本次课程设计是建立在tcp协议的基础上的,tcp是可靠的面向连接的协议,因此

当用户的操作无法实现时,会提示用户出错,以便用户及时的采取措施保证文件传输的正确。

7.2设计的不足

本次的课程设计的不足之处是不能够实现断线的自动重连和多站点同时下载。它在出现错误的时候会提示用户出错,例如超时,此时用户得到了错误提示后再进行重新连接或处理。只能对一个ftp主机地址进行文件传输,要实现多站点的同时下载是一个很复杂的过程。

7.3 收获与体会

本次的课程设计让我透彻的了解了ftp协议的工作原理,ftp文件传输的模式和ftp文件传输的两种工作方式。学会了VB中winsock的使用,并能够通过高级语言编程实现客户端与ftp服务器主机相连接并实现文件的传输。巩固VB程序语言的应用,这次课程设计中有很多的函数在以前的编程中都没有遇到过,这次的课程设计起到了一个查漏补缺的作用,例如系统函数InStrRev(,,)的意思是返回某一字符串从另一字符串的右侧开始算起第一次出现的位置,这是我通过在网络上查询知道的。

18

武汉理工大学《计算机网络》课程设计说明书

这次的课程设计使我了解到一个好的程序是要用大量的时间和不断的思考换来的,恒心和细心是一个程序员必须具备的基本要素。同时还要积极的和别人交流,这样才能弥补自身的不足。

总之,这次的课程设计使我感到了网络的功能是如此强大并且在不断地日益完善,我们平时只使用了网络的很小的一部分功能。例如:我们经常接触http协议,在上网搜集资料的时候只考虑到了以http://开头的网址,其实它只是网络资源里很小的一部分,很多的大学,科学院所,机关部门等都对外免费开放了自己的ftp资源,用户可以通过访问共享这些资源。匿名FTP使用户有机会存取到世界上最大的信息库,这个信息库是日积月累起来的,并且还在不断增长,永不关闭,涉及到几乎所有主题。而且,这一切是免费的。 因此ftp对我们的吸引是巨大的。

这次课程设计激发了我对计算机网络这一门课程的兴趣,使我获益良多。

8展望(该实用程序进一步改进扩展的设想)

本次的课程设计只能实现单个FTP服务器地址的下载,如果在程序中设置多个发送进程使信息发送到不同的ftp主机地址,那么就可以实现多文件的下载。

同样该程序如果设置了计时器,当在规定的时间内没有实现ftp主机与用户的连接那么就可以自动调用连接进程重新连接,这样就实现了断线自动重新连接并自动恢复传输的功能。

19

本文来源:https://www.bwwdw.com/article/kap3.html

Top