FTP客户端的设计与实现.docx
- 文档编号:7726467
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:11
- 大小:102.79KB
FTP客户端的设计与实现.docx
《FTP客户端的设计与实现.docx》由会员分享,可在线阅读,更多相关《FTP客户端的设计与实现.docx(11页珍藏版)》请在冰豆网上搜索。
FTP客户端的设计与实现
FTP客户端的设计与实现
摘要:
FTP(FileTransferProtocol)即文件传输协议是TCP/IP协议族中的一个应用层协议。
FTP客户端利用TCP的可靠传输服务,减少了不同文件系统间的不兼容性,实现了文件的传送功能;而且它提供了直观的文件传输操作方式,用户只需要使用鼠标拖动选择就可以完成相关操作。
文章主要介绍了FTP的相关知识、VisualBasic各种控件以及WindowsAPI函数的调用等内容。
在此基础上文章最后介绍了如何使用VB完成FTP客户端应用程序的开发。
关键词:
VB;FTP;WindowsAPI
0引言
FTP(FileTransferProtocol)协议即文件传输协议是TCP/IP体系结构中的一个重要协议,专门用于局域网或Internet中服务器和客户端之间进行文件传输。
FTP协议利用TCP的可靠传输服务,减少了不同文件系统间的不兼容,实现了文件的传送功能。
FTP极大的丰富了我们的网络生活,成为互联网上不可缺少的服务方式之一[1]。
1设计内容
FTP使用客户/服务器方式,本课题就是设计一个FTP客户端程序,其具有以下基本功能:
能完成FTP链接的打开和关闭;能实现本地和远程目录的浏览;能执行文件的上传和下载等有关操作。
2开发工具简介
2.1VisualBasic简介
Basic发展到今天已经有很多版本,如GW-Basic、QBasic、VisualBasic等等。
其中VisualBasic是最容易学习与应用的程序语言之一,而且其功能也非常强大。
VisualBasic6.0自带的一些功能控件可以帮助我们实现网络通信的功能,是我们网络编程中的一个重要的编程工具。
2.2WindowsAPI函数介绍
Win32API也就是MicrosoftWindows32位平台的应用程序编程接口。
WindowsAPI可以提供形形色色的服务,凡是在Windows操作系统环境下开发的应用程序,都可以调用WindowsAPI。
2.3InternetTransfer控件介绍
InternetTransfer控件是微软为方便使用者设计Internet应用程序所提供的一种控件。
它提供两种Internetprotocol:
HTTP及FTP。
我们在使用时,必须先设置好它的存取方式。
存取方式分为直接连接或通过proxy来连接Internet网络两种。
当我们设置好相关参数之后,InternetTransfer控件提供两个method(OpenURL及Execute)让我们执行网络相关操作,我们可以用这两个命令来执行一些Internetcommand。
2.4WindowsSocket控件
Socket由UNIX操作系统逐步移植到Windows,WindowsSocket规范于90年代初,依次有1.0、1.1、2.0和3.0。
WindowsSocket规范定义并记录了如何使用API;Socket是网络通信的基本操作单元,目前Windows支持两种套接口:
流套接口和数据报套接口。
TCP/IP中的TCP协议使用的是流套接口,提供了面向连接的、无差错的、发送先后顺序一致、包长度不限和非重复的网络信息包的传输。
TCP/IP中的UDP则使用数据报套接口,该接口提供双向的、有序的、无重复并有记录边界的数据报服务。
2.5FTP基础理论知识
FTP是TCP/IP的一种具体应用,它工作在OSI模型的第七层,TCP模型的第四层,即应用层,同时在传输层使用TCP,所以FTP客户在和服务器建立连接前就要经过一个被称作"三次握手"的过程。
其连接是可靠的,传输是面向连接的,所以能为数据传输提供可靠的保证。
使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可上传或下载文件。
但其违背了Internet的开放性,为此系统管理员建立了一个特殊的用户ID,名为anonymous,Internet上的任何人在任何地方都可使用该用户ID。
习惯上,人们用自己的E-mail地址作为口令。
2.6FTP工作原理
FTP协议中,控制连接均由客户端发起,而数据连接有两种工作方式:
PORT方式和PASV方式。
下面以PORT方式为例,如图1所示:
①FTP服务器运行FTP守护进程,等待用户的FTP请求。
②用户运行FTP命令,请求FTP服务器为其服务
③FTP守护进程收到用户的FTP请求后,派生出FTP子进程与用户进程
交互,建立文件传输控制连接,使用TCP端口21。
④用户输入FTP子命令,服务器接收子命令,如命令正确,双方各派生一个数据传输进程FTP-DATA,建立数据连接,使用TCP端口20进行数据传输。
⑤本次子命令请求的数据传输完毕,拆除数据连接,结束FTP-DATA进程。
⑥用户继续输入FTP子命令,重复④、⑤的过程,直至用户输入quit命令,
双方拆除控制连接,结束文件传输,结束FTP子进程。
图1FTP工作原理示意图
3详细设计
3.1程序数据流程图
FTP的客户端程序设计的主要内容如图2所示:
客户登录模块、FTP服务器目录浏览模块、上传和下载模块。
设计流程:
客户端程序先连接服务器,然后浏览FTP服务器目录,选择文件下载或上传,进行文件数据传输,最后断开连接[2,3]。
3.2系统界面设计
系统界面主要包括以下几个方面的内容:
登录部分、远程目录浏览部分、本地目录文件浏览部分等。
系统界面是在新建窗体的基础上将其Caption改为“FTP客户端”,增加相应的文本框、命令按钮等一些控件实现,具体如图3所示
图2程序数据流程图
图3系统界面
3.3模块设计
3.3.1登录模块
为使客户端能登录服务器,须设置以下属性:
◆FTP服务器地址:
txtserver
◆用户名:
txtuser
◆密码:
txtpassword
◆端口号:
txtport(一般为21)
txtuser及txtpassword代表登录此FTP服务器所需要的用户名及密码,若两者皆为空字符串,则代表是以anonymous(匿名)身份登入;若输入用户名与密码,Connect会以此做为其用户名及密码与FTP服务器建立连接;随后是对“连接”按钮的设置,实现与服务器端的连接[4]。
以下为“连接”命令按钮的代码:
PrivateSubcmdConnect_Click()
IfNotbActiveSessionAndhOpen<>0Then
IftxtServer.Text=""Then
MsgBox"Pleaseenteraservername!
"
ExitSub
EndIf
DimnFlagAsLong
IfchkPassive.ValueThen
nFlag=INTERNET_FLAG_PASSIVE
Else
nFlag=0
EndIf
IfhConnection=0Then
bActiveSession=False
ErrorOutErr.LastDllError,"InternetConnect"
Else
bActiveSession=True
EnableUI(CBool(hOpen))
FillTreeViewControl(txtServer.Text)
FtpEnumDirectory("")
IfEnumItemNameBag.Count=0ThenExitSub
FillTreeViewControl(txtServer.Text)
EndIf
EndIf
EndSub
3.3.2浏览模块
3.3.2.1远程端浏览模块
本模块是通过对treeview控件的设置以及相关代码的编写来实现对FTP服务器默认目录与文件的读取。
当建立连接成功之后,通过函数调用取得FTP服务器端默认最大的目录(FTP服务器针对不同用户开放不同的目录名称)。
当然FTP服务器端也必须开放目录读取权限,允许客户端连接登录及浏览目录,否则Connect的执行将失效[5,6,7]。
3.3.2.2本地浏览模块
本地浏览模块通过DriveComboBox、DirectoryListBox和FileListBox三个控件设计实现。
DriveComboBox用于设置驱动器,DirectoryListBox用于显示当前驱动器所有文件与目录,FileListBox用于显示所选中的文件夹中的所有文件。
3.3.3文件上传下载模块
文件传输是一个双向的过程,既可以把服务器上的文件下载到指定的文件下,也可以把本地某文件上传到服务器。
3.3.3.1文件下载模块
文件下载是通过点击“下载”按钮来完成对选定的远程目录下文件的下载。
此功能实现主要是通过程序获取本地和远程的当前路径,区分被选中的内容类型为文件还是目录,若为文件时执行下载过程,否则退出。
以下为“下载”命令按钮的代码[8]:
PrivateSubcmdGet_Click()
DimbRetAsBoolean
DimszFileRemoteAsString,szDirRemoteAsString,szFileLocalAsString
DimszTempStringAsString
DimnPosAsLong,nTempAsLong
DimnodXAsNode
SetnodX=TreeView1.SelectedItem
IfbActiveSessionThen
IfnodXIsNothingThen
MsgBox"PleaseselecttheitemtoGET!
"
ExitSub
EndIf
szTempString=TreeView1.SelectedItem.Text
szFileRemote=szTempString
nPos=0
nTemp=0
Do
nTemp=InStr(1,szTempString,"/",vbBinaryCompare)
IfnTemp=0ThenExitDo
szTempString=Right(szTempString,Len(szTempString)-nTemp)
nPos=nTemp+nPos
Loop
szDirRemote=Left(szFileRemote,nPos)
szFileRemote=Right(szFileRemote,Len(szFileRemote)-nPos)
szFileLocal=File1.Path
rcdszDirRemote
bRet=FtpGetFile(hConnection,szFileRemote,szFileLocal&"/"&szFileRemote,
False,INTERNET_FLAG_RELOAD,dwType,0)
File1.Refresh
IfbRet=FalseThenErrorOutErr.LastDllError,"FtpGetFile"
Else
MsgBox"Notinsession"
EndIf
EndSub
3.3.3.2文件上传模块
文件上传是通过点击“上传”按钮来完成对选定的本地文件的上传。
上传文件基本与下载文件类似,但FTP服务器端必须开放目录写入的权限,并允许修改FTP服务器目录下文件,否则,上传动作将失败。
以下为“上传”命令按钮的代码[9,10]:
PrivateSubcmdPut_Click()
DimbRetAsBoolean
DimszFileRemoteAsString,szDirRemoteAsString,szFileLocalAsString
DimszTempStringAsString
DimnPosAsLong,nTempAsLong
DimnodXAsNode
SetnodX=TreeView1.SelectedItem
IfbActiveSessionThen
IfnodXIsNothingThen
MsgBox"PleaseselectaremotedirectorytoPUTto!
"
ExitSub
EndIf
IfnodX.Image="leaf"Then
MsgBox"PleaseselectaremotedirectorytoPUTto!
"
ExitSub
EndIf
IfFile1.FileName=""Then
MsgBox"Pleaseselectalocalfiletoput"
ExitSub
EndIf
szTempString=nodX.Text
szDirRemote=Right(szTempString,Len(szTempString)-Len(txtServer.Text))
szFileRemote=File1.FileName
szFileLocal=File1.Path&"\"&File1.FileName
If(szDirRemote="")ThenszDirRemote="\"
rcdszDirRemote
bRet=FtpPutFile(hConnection,szFileLocal,szFileRemote,dwType,0)
IfbRet=FalseThen
ErrorOutErr.LastDllError,"FtpPutFile"
ExitSub
EndIf
DimnodChildAsNode,nodNextChildAsNode
SetnodChild=nodX.Child
Do
IfnodChildIsNothingThenExitDo
SetnodNextChild=nodChild.Next
TreeView1.Nodes.RemovenodChild.Index
IfnodNextChildIsNothingThenExitDo
SetnodChild=nodNextChild
Loop
IfnodX.Image="closed"Then
nodX.Image="open"
EndIf
FtpEnumDirectory(nodX.Text)
FillTreeViewControl(nodX.Text)
EndIf
EndSub
4系统设计测试与分析
首先找到一个可以使用的FTP服务器的地址或自己配置一个FTP服务器,随后取得相应的权限。
运行设计完成的FTP客户端,并填写相关内容,点击“连接”按钮正常连入主机,具体如图4所示:
可以看到左边的是远程服务器端的文件与目录,而右边是本地文件与目录,我们可以点击“上传”和“下载”两个按钮对文件进行上传或下载操作,非常简捷,方便。
当完成相关操作后,我们可以点击“断开”命令按钮来断开FTP连接,以保证FTP用户正确安全的退出。
实验测试表明我们设计的FTP客户端程序已经实现了标准的FTP客户端的基本功能。
图4连接成功后系统界面
5结束语
通过此次毕业设计,我发现了自己在做工作中的许多不足,认识到了知识与实践联系的重要性,体会到只有不断的充实自己,不断的挑战自我,才能在今后的工作生活中获得更多的收获。
毕业设计是对自己的一个挑战,同时毕业设计也作为几年来学习成果的检验,让我学习到了很多东西。
虽然只有短短的几个月,但它将对我以后的前进道路产生深远的影响。
在此向所有帮助我的老师和同学致谢!
参考文献
[1]谢希仁.计算机网络(第4版)[M].北京:
电子工业出版社,2003:
284-289.
[2]黄嘉辉.VisualBasic.NET网络程序设计[M].北京:
清华大学出版社,2003:
17-268.
[3]张毅.VB应用技巧与常见问题你问我答[M].北京:
机械工业出版社,2003:
13-166.
[4]赵洁.同步FTP上载/下载程序的实现技术[J].计算机系统应用,2002(6):
38-40.
[5]吴光明.使用开发FTP客户端应用程序[J].河北理工学院学报,2005,27
(1):
59-64.
[6]谷震离,杜根远,谷新黎.VB应用程序开发与设计[J].许昌师专学报,2002,21
(2):
57-61.
[7]丁亚明.VB中的变量及参数传递[J].微型电脑应用,2002(7):
59-63.
[8]严仲兴.浅谈面向对象的程序设计思想[J].电脑知识与技术,2006(12):
139-158.
[9]李书浩,齐治昌.程序设计规则检查:
一种保障软件质量的基本方法[J].计算机科学,2003,30(11):
148-151.
[10]W.RichardStevens.TCP/IP详解卷1[M].北京:
机械工业出版社,2000:
14-324.
TheDesignandImplementofFTPClient
GUOYuan-jia
Abstract:
FTP(FileTransferProtocol)isaapplicationlayerprotocolinTCP/IPfamily.FTPclientterminalprogramalsooffersvisualanddirectwayoftransportingfiles.Clientscanfinishtherelevantoperationjustbydraggingthemouthandmakingchoice.ThetextmainlytellsyouhowtouseVisualBasicandWindowsAPIfunctiontoimplementeveryfunctionoftheFTPclient,finallyaccomplishthedevelopmentoftheVisualBasicapplicationprogram.
Keywords:
VB;FTP;WindowsAPI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FTP 客户端 设计 实现