利用VB实现FTP基本功能.docx

上传人:b****5 文档编号:5666501 上传时间:2022-12-31 格式:DOCX 页数:19 大小:197.19KB
下载 相关 举报
利用VB实现FTP基本功能.docx_第1页
第1页 / 共19页
利用VB实现FTP基本功能.docx_第2页
第2页 / 共19页
利用VB实现FTP基本功能.docx_第3页
第3页 / 共19页
利用VB实现FTP基本功能.docx_第4页
第4页 / 共19页
利用VB实现FTP基本功能.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

利用VB实现FTP基本功能.docx

《利用VB实现FTP基本功能.docx》由会员分享,可在线阅读,更多相关《利用VB实现FTP基本功能.docx(19页珍藏版)》请在冰豆网上搜索。

利用VB实现FTP基本功能.docx

利用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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1