利用VB实现FTP基本功能.docx
- 文档编号:5666501
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:19
- 大小:197.19KB
利用VB实现FTP基本功能.docx
《利用VB实现FTP基本功能.docx》由会员分享,可在线阅读,更多相关《利用VB实现FTP基本功能.docx(19页珍藏版)》请在冰豆网上搜索。
利用VB实现FTP基本功能
课程设计任务书
题目:
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.1FTP概念和传输原理
FTP是Internet上使用非常广泛的一种通讯协议。
它是由支持Internet文件传输的各种规则所组成的集合,这些规则使Internet用户可以把文件从一个主机拷贝到另一个主机上,因而为用户提供了极大的方便和收益。
FTP和其它Internet服务一样,也是采用客户机/服务器方式。
使用方法很简单,启动FTP客户端程序先与远程主机建立连接,然后向远程主机发出传输命令,远程主机在收到命令后就给予响应,并执行正确的命令。
FTP有一个根本的限制,那就是,如果用户未被某一FTP主机授权,就不能访问该主机,实际上是用户不能远程登录(RemoteLogin)进入该主机。
也就是说,如果用户在某个主机上没有注册获得授权,没有用户名和口令,就不能与该主机进行文件的传输。
而AnonymousFTP则取消了这种限制。
FTP支持两种模式,一种方式叫做Standard(也就是PORT方式,主动方式),一种是Passive(也就是PASV,被动方式)。
Standard模式FTP的客户端发送PORT命令到FTP服务器。
Passive模式FTP的客户端发送PASV命令到FTPServer。
Port模式FTP客户端首先和FTP服务器的TCP21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。
PORT命令包含了客户端用什么端口接收数据。
在传送数据的时候,服务器端通过自己的TCP20端口连接至客户端的指定端口发送数据。
FTPserver必须和客户端建立一个新的连接用来传送数据。
Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。
FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTPserver不再需要建立一个新的和客户端之间的连接。
FTP可用多种格式传输文件,通常由系统决定,大多数系统(包括UNIX系统)只有两种模式:
文本模式(ASCII)和二进制模式(BIN/IMAGE)。
简单的说,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主机确实允许用户上载文件,用户也只能将文件上载至某一指定上载目录中。
随后,系统管理员会去检查这些文件,他会将这些文件移至另一个公共下载目录中,供其他用户下载,利用这种方式,远程主机的用户得到了保护,避免了有人上载有问题的文件,如带病毒的文件。
因此要实现文件的上传,还需选择一个特殊的可以用户上传文件的FTP服务器主机地址。
4详细的算法描述
5源程序与执行结果(含测试方法和测试结果)
5.1原程序部分
5.1.1frmMain窗体的部分代码
ConstNAME_COLUMN=0
ConstTYPE_COLUMN=1
ConstSIZE_COLUMN=2
ConstDATE_COLUMN=3
PrivateDeclareFunctionLockWindowUpdateLib"user32"(ByValhwndLockAsLong)AsLong
DimmbMovingAsBoolean'定义是否鼠标按下
ConstsglSplitLimit=500'定义最小的分割距离
Privatem_LastNodeAsNode
PrivateWithEventsm_FtpConnectionAsCFtpConnection
Privatem_strFileAsString
Privatem_lFileSizeAsLong
PrivateSubCheck1_Click()
IfCheck1.ValueThen
m_FtpConnection.PassiveMode=True
Else
m_FtpConnection.PassiveMode=False
EndIf
EndSub
PrivateSubCoolBar1_HeightChanged(ByValNewHeightAsSingle)
SizeControlspicSplitter.Left
EndSub
PrivateSubForm_Load()
Me.Left=GetSetting(App.Title,"Settings","MainLeft",1000)'app.title是当前程序的标题
Me.Top=GetSetting(App.Title,"Settings","MainTop",1000)'表示读取注册表中关于App.Title所指的应用程序中Settings注册表目录下的MainTop变量的值,如果没有找到这个注册表变量则,默认为1000
Me.Width=GetSetting(App.Title,"Settings","MainWidth",6500)
Me.Height=GetSetting(App.Title,"Settings","MainHeight",6500)
Setm_FtpConnection=NewCFtpConnection
m_FtpConnection.Timeout=180
EndSub
PrivateSubForm_Unload(CancelAsInteger)
DimiAsInteger
Setm_FtpConnection=Nothing'closeallsubforms
Fori=Forms.Count-1To1Step-1'卸载所有窗体
UnloadForms(i)
Next
SaveSettingApp.Title,"Settings","ViewMode",lvListView.View
EndSub
PrivateSubm_FtpConnection_StateChanged(StateAsFTP_CONNECTION_STATES)
DimstrStatusAsString
SelectCaseState
CaseFTP_CONNECTION_RESOLVING_HOST
strStatus="Resolvinghost..."
CaseFTP_CONNECTION_HOST_RESOLVED
strStatus="Hostresolved"
CaseFTP_CONNECTION_CONNECTED
strStatus="Connected"
CaseFTP_CONNECTION_AUTHENTICATION
strStatus="Authentication..."
CaseFTP_USER_LOGGED
strStatus="Youareloggedin.Connectionready."
CaseFTP_ESTABLISHING_DATA_CONNECTION
strStatus="Establishingdataconnection..."
CaseFTP_DATA_CONNECTION_ESTABLISHED
strStatus="Dataconnectionestablished."
CaseFTP_RETRIEVING_DIRECTORY_INFO
strStatus="Retrievingdirectoryinfo..."
CaseFTP_DIRECTORY_INFO_COMPLETED
strStatus="Directorylistingcompleted."
CaseState=FTP_TRANSFER_STARTING
strStatus="Transferinprogress..."
CaseFTP_TRANSFER_COMLETED
strStatus="Transfercompleted."
ProgressBar1.Value=0.01
m_lFileSize=0
EndSelect
sbStatusBar.Panels
(1).Text=strStatus
EndSub
PrivateSubimgSplitter_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
WithimgSplitter'imgSplitter为image(图片)控件
picSplitter.Move.Left,.Top,.Width\2,.Height-20
EndWith
picSplitter.Visible=True
mbMoving=True
LockWindowUpdateMe.hwnd'指将句柄为Handle的窗体锁定,不能更新。
EndSub
PrivateSubm_FtpConnection_UploadProgress(lBytesAsLong)
OnErrorResumeNext
sbStatusBar.Panels
(1).Text="Uploading"&m_strFile&"("&lBytes&"bytes)"
ProgressBar1.Value=lBytes/(m_lFileSize/100)
EndSub
PrivateSubmnuConnect_Click()
CallEstablishConnection
EndSub
PrivateSubmnuDelete_Click()
DimintRetValAsInteger
DimstrFileNameAsString
OnErrorGoToERROR_HANDLER
strFileName=tvTreeView.SelectedItem.Key&lvListView.SelectedItem.Text
intRetVal=MsgBox("Doyoureallywanttodeletefile"&strFileName&"?
",vbYesNoCancel,"Deletefile")
IfintRetVal=vbYesThen
Ifm_FtpConnection.DeleteFile(strFileName)Then
ListFilestvTreeView.SelectedItem'返回最近选中的项目
Else
MsgBox"Can'tdeletefile."&vbCrLf&vbCrLf&_
"Serverresponse:
"&_
m_FtpConnection.GetLastServerResponse,,_
"Can'tdeletefile"
EndIf
EndIf
ExitSub
ERROR_HANDLER:
IfErr=91Then
MsgBox"Selectfiletorename,please.",vbInformation,"RenameFile"
Else
MsgBox"Erroroccured!
"&vbCrLf&"#"&Err.Number&":
"&Err.Description,_
vbInformation,"RenameFile"
EndIf
EndSub
PrivateSubmnuDownload_Click()
CallDownloadFile
EndSub
PrivateSubmnuFile_Click()
Withm_FtpConnection
mnuDownload.Enabled=Not.Busy
mnuUpload.Enabled=Not.Busy
EndWith
EndSub
PrivateSubmnuHelp_Click()
mnuHelpAbout.Enabled=Notm_FtpConnection.Busy
EndSub
PrivateSubmnuListViewMode_Click(IndexAsInteger)
SelectCaseIndex'当鼠标点击工具栏的view菜单时
Case0lvListView.View=lvwIcon'显示大图标的情况
Case1lvListView.View=lvwSmallIcon'显示小图标的情况
Case2lvListView.View=lvwList'只显示列表
Case3lvListView.View=lvwReport'显示文件大小和日期
EndSelect
tbToolBar.Buttons(15+Index).Value=tbrPressed
EndSub
PrivateSubtbToolBar_ButtonClick(ByValButtonAsMSComctlLib.Button)'ByRef是VB默认的参数传递方式,如果指定传递的是参数的值要使用关键字ByVal
DimstrTempAsString
OnErrorResumeNext
SelectCaseButton.Key
Case"Connect"
CallEstablishConnection
Case"UpLevel"
SettvTreeView.SelectedItem=tvTreeView.SelectedItem.Parent
strTemp=tvTreeView.SelectedItem.FullPath
strTemp=Mid$(strTemp,InStr(1,strTemp,"/"))'InStrRev返回某一字符串从另一字符串的右侧开始算起第一次出现的位置
Ifm_FtpConnection.SetCurrentDirectory(strTemp)Then
ListFilestvTreeView.SelectedItem
EndIf
Case"Stop"
IfNotm_FtpConnection.CloseConnectionThen
Ifm_FtpConnection.FtpGetLastError=ERROR_FTP_USER_TRANSFER_IN_PROGRESSThen
DimintRetValAsInteger
intRetVal=MsgBox("Datatransferinprogress.Doyouwanttocancelthedatatransfer?
",vbYesNo+vbQuestion)
IfintRetVal=vbYesThen
m_FtpConnection.CancelTransfer
EndIf
EndIf
EndIf
Case"Refresh"
CallRefreshDirectory
Case"Download"
mnuDownload_Click
Case"Upload"
mnuUpload_Click
Case"CreateDirectory"
mnuCreateDir_Click
Case"Delete"
mnuDelete_Click
Case"Rename"
mnuRename_Click
Case"ViewLargeIcons"
lvListView.View=lvwIcon
Case"ViewSmallIcons"
lvListView.View=lvwSmallIcon
Case"ViewList"
lvListView.View=lvwList
Case"ViewDetails"
lvListView.View=lvwReport
EndSelect
EndSub
PrivateSubmnuFileClose_Click()
'unloadtheform
UnloadMe
EndSub
PublicFunctionFormatFileSize(lFileSizeAsLong)AsString
OnErrorGoToERROR_HANDLER
IflFileSize>=1024Then
FormatFileSize=Format$(CStr(lFileSize/1024),"#########KB")'CStr转换为String类型
Else
FormatFileSize=CStr(lFileSize)&""&"bytes"
EndIf
ExitFunction
ERROR_HANDLER:
Debug.PrintErr.Number&""&Err.Description
EndFunction
PrivateSubtvTreeView_DragDrop(SourceAsControl,xAsSingle,yAsSingle)'source只正在被拖动的控件,x,y指鼠标指针在目标对象中的坐标值
IfSource=imgSplitterThen
SizeControlsx
EndIf
EndSub
PrivateSubAddFileToListView(oFtpFileAsCFtpFile)
DimintIconAsInteger
DimstrFileNameAsString
strFileName=oFtpFile.FileName
intIcon=GetImageNumber(strFileName)
SetlvItem=lvListView.ListItems.Add(,strFileName,strFileName,intIcon,intIcon)
lvItem.SubItems
(1)=oFtpFile.FileSize
lvItem.SubItems
(2)=oFtpFile.LastWriteTime
EndSub
PrivateSubRefreshDirectory()
WithtvTreeView.SelectedItem'从treeview中移除所有subfolders
If.Children>0Then
Fori=1To.Children
tvTreeView.Nodes.Remove(.Child.Index)
Nexti
EndIf
lvListView.ListItems.Clear
ListFilestvTreeView.SelectedI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 VB 实现 FTP 基本功能