版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计任务书题 目: ftp文件传输的实现 初始条件:理论:学完“操作系统”和“计算机网络”课程,掌握一种高级程序设计语言(c+、c#、java、delphi)及集成开发平台的使用。实践:计算机学院科学系实验中心提供计算机、软件平台和网络环境。如果自己有计算机可以在其上进行设计。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1) 模仿应用ftp协议。(2)主要功能: 1支持站点目录和文件结构浏览。2支持断线自动重新连接并自动恢复传输。3文件列表过滤,远程编辑,整个远端目录删除,目录上传下载。(3)应用所学计算机网络课程中的知识,利用网络实用程序实现其协议
2、。(4)编制好网络实用程序后,设计若干用例,上机测试并分析所设计的程序。(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:设计题目;需求说明(要求、功能简述)或问题描述;设计说明(简要的分析与概要设计);详细的算法描述;源程序与执行结果(含测试方法和测试结果);使用说明;设计心得(设计的特点、不足、收获与体会);展望(该实用程序进一步改进扩展的设想)。时间安排:设计时间一周: 周1:查阅相关资料。周2:系统分析,设计。周3周4:编程并上机调试周5:撰写课程设计报告。设计验收安排:19周星期五8:00起到计算机学院科学系实验中心进行上机验收。设计报告书收取时间:19周的星期五下午
3、5:00之前。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日武汉理工大学计算机网络课程设计说明书ftp文件传输的实现1设计题目ftp文件传输的实现2需求说明(要求、功能简述)或问题描述2.1 ftp概念和传输原理ftp是internet上使用非常广泛的一种通讯协议。它是由支持internet文件传输的各种规则所组成的集合,这些规则使 internet用户可以把文件从一个主机拷贝到另一个主机上,因而为用户提供了极大的方便和收益。ftp和其它internet服务一样,也是采用客户机/服务器方式。使用方法很简单,启动ftp客户端程序先与远程主机建立连接,然后向远程主机发出传输命令,
4、远程主机在收到命令后就给予响应,并执行正确的命令。ftp有一个根本的限制,那就是,如果用户未被某一ftp主机授权,就不能访问该主机,实际上是用户不能远程登录(remote login)进入该主机。也就是说,如果用户在某个主机上没有注册获得授权,没有用户名和口令,就不能与该主机进行文件的传输。而anonymous ftp则取消了这种限制。ftp支持两种模式,一种方式叫做standard(也就是port方式,主动方式),一种是passive (也就是pasv,被动方式)。standard模式ftp的客户端发送port命令到ftp服务器。passive模式ftp的客户端发送pasv命令到ftpser
5、ver。port模式ftp客户端首先和ftp服务器的tcp21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送port命令。port命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的tcp20端口连接至客户端的指定端口发送数据。ftp server必须和客户端建立一个新的连接用来传送数据。passive模式在建立控制通道的时候和standard模式类似,但建立连接后发送的不是port命令,而是pasv命令。ftp服务器收到pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接ftp服务器此
6、端口,然后ftp服务器将通过这个端口进行数据的传送,这个时候ftp server不再需要建立一个新的和客户端之间的连接。 ftp可用多种格式传输文件,通常由系统决定,大多数系统(包括unix系统)只有两种模式:文本模式(ascii)和二进制模式(bin/image)。简单的说,ftp就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为下载文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为上载文件。在tcp/ip协议中,ftp标准命令tcp端口号为21,port方式数据端口为20。ftp(非匿名)必须要有4要素:ftp主机地址,端口号,用户名,密码。2.2 需求说明完
7、成两台计算机之间的拷贝,实现文件的上传和下载;支持站点目录和文件结构浏览;文件列表过滤,远程编辑,整个远端目录删除;支持断线自动重新连接并自动恢复传输。3设计说明(简要的分析与概要设计)采用vb编程,通过建立一系列的窗体模块,程序模块,类模块编制一个小的应用软件。该软件的功能是当程序运行成功后,用户可以选择任意的ftp主机地址进行登陆。当选择是匿名的ftp主机地址时,选择anonymous复选框,这时只需要输入ftp主机地址就可以登陆,此时用户名为anonymous,密码为emai1地址,以便更好地对用户访问进行跟综。如果不是匿名登陆,则取消选择anonymous复选框,这时要输入用户名和密码
8、,一个用户名对应了一个访问的权限。通过winsock建立连接,将信息发送到远程的ftp服务器主机上,实现用户的登陆。当用户成功登陆后,远程ftp主机的文件就全部列在frmmain窗体左侧的treeview控件中,当点机treeview控件中的文件夹时,相应的文件夹中的文件就列在右侧的listview控件中,并且显示文件的图标,大小和最近的访问日期。显示的方式可以通过点击工具栏中的图标来设置,文件可以以大图标的形式显示,也可以以小图标的形式显示。当用户选择了远程的某一个文件后,可以点击工具栏上的下载,删除,重命名图标来实现对远程文件的操作。但实际上大多数ftp主机为了安全采取了一些保护措施以保护
9、自己的文件。除非你有特殊的权限,否则不能对文件进行修改和删除。但是大多数匿名ftp主机都允许用户从其下载文件。用户也可以在本地选择文件上传到ftp服务器主机,大多数用户不能将自己机器上的任何一个文件拷贝至匿名ftp主机上。即使有些匿名ftp主机确实允许用户上载文件,用户也只能将文件上载至某一指定上载目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另一个公共下载目录中,供其他用户下载,利用这种方式,远程主机的用户得到了保护,避免了有人上载有问题的文件,如带病毒的文件。因此要实现文件的上传,还需选择一个特殊的可以用户上传文件的ftp服务器主机地址。4详细的算法描述用户选择与ftp服务器
10、连接匿名ftp服务器?输入用户名和密码 输入ftp服务器地址点击连接,与ftp服务器连接连接成功?根据错误代码进行调试 开 始用户选择文件传输模式进行文件的上传,下载,修改,重命名等操作 操作成功?出 错 处 理 退 出? 断 开 连 接ynnynyny5 源程序与执行结果(含测试方法和测试结果)5.1原程序部分5.1.1 frmmain 窗体的部分代码const name_column = 0const type_column = 1const size_column = 2const date_column = 3private declare function lockwindowupd
11、ate lib user32 (byval hwndlock as long) as longdim mbmoving as boolean 定义是否鼠标按下const sglsplitlimit = 500 定义最小的分割距离private m_lastnode as nodeprivate withevents m_ftpconnection as cftpconnectionprivate m_strfile as stringprivate m_lfilesize as longprivate sub check1_click() if check1.value then m_ftpc
12、onnection.passivemode = true else m_ftpconnection.passivemode = false end ifend subprivate sub coolbar1_heightchanged(byval newheight as single) sizecontrols picsplitter.leftend subprivate sub form_load() me.left = getsetting(app.title, settings, mainleft, 1000) app.title是当前程序的标题 me.top = getsetting
13、(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) set m_ftpconnection = new cftpconnection m_ftpconnection.timeout
14、 = 180end subprivate 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, settings, viewmode, lvlistview.viewend subprivate sub m_ftpconnection_statechanged(state
15、as ftp_connection_states) dim strstatus as string select case state case ftp_connection_resolving_host strstatus = resolving host. case ftp_connection_host_resolved strstatus = host resolved case ftp_connection_connected strstatus = connected case ftp_connection_authentication strstatus = authentica
16、tion. case ftp_user_logged strstatus = you are logged in. connection ready. case ftp_establishing_data_connection strstatus = establishing data connection. case ftp_data_connection_established strstatus = data connection established. case ftp_retrieving_directory_info strstatus = retrieving director
17、y info. case ftp_directory_info_completed strstatus = directory listing completed. case state = ftp_transfer_starting strstatus = transfer in progress. case ftp_transfer_comleted strstatus = transfer completed. progressbar1.value = 0.01 m_lfilesize = 0 end select sbstatusbar.panels(1).text = strstat
18、usend subprivate 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的窗体锁定,不能更新。e
19、nd subprivate sub m_ftpconnection_uploadprogress(lbytes as long) on error resume next sbstatusbar.panels(1).text = uploading & m_strfile & ( & lbytes & bytes) progressbar1.value = lbytes / (m_lfilesize / 100)end subprivate sub mnuconnect_click() call establishconnectionend subprivate sub mnudelete_c
20、lick() dim intretval as integer dim strfilename as string on error goto error_handler strfilename = tvtreeview.selecteditem.key & lvlistview.selecteditem.text intretval = msgbox(do you really want to delete file & strfilename & ?, vbyesnocancel, delete file) if intretval = vbyes then if m_ftpconnect
21、ion.deletefile(strfilename) then listfiles tvtreeview.selecteditem 返回最近选中的项目 else msgbox cant delete file. & vbcrlf & vbcrlf & _ server response: & _ m_ftpconnection.getlastserverresponse, , _ cant delete file end if end if exit suberror_handler: if err = 91 then msgbox select file to rename, please
22、., vbinformation, rename file else msgbox error occured! & vbcrlf & # & err.number & : & err.description, _ vbinformation, rename file end ifend subprivate sub mnudownload_click() call downloadfileend subprivate sub mnufile_click() with m_ftpconnection mnudownload.enabled = not .busy mnuupload.enabl
23、ed = not .busy end withend subprivate sub mnuhelp_click() mnuhelpabout.enabled = not m_ftpconnection.busyend subprivate sub mnulistviewmode_click(index as integer) select case index 当鼠标点击工具栏的view菜单时 case 0 lvlistview.view = lvwicon 显示大图标的情况 case 1 lvlistview.view = lvwsmallicon 显示小图标的情况 case 2 lvlis
24、tview.view = lvwlist 只显示列表 case 3 lvlistview.view = lvwreport 显示文件大小和日期 end select tbtoolbar.buttons(15 + index).value = tbrpressedend subprivate sub tbtoolbar_buttonclick(byval button as mscomctllib.button) byref是vb默认的参数传递方式,如果指定传递的是参数的值要使用关键字byval dim strtemp as string on error resume next select
25、case button.key case connect call establishconnection case uplevel set tvtreeview.selecteditem = tvtreeview.selecteditem.parent strtemp = tvtreeview.selecteditem.fullpath strtemp = mid$(strtemp, instr(1, strtemp, /) instrrev返回某一字符串从另一字符串的右侧开始算起第一次出现的位置 if m_ftpconnection.setcurrentdirectory(strtemp)
26、 then listfiles tvtreeview.selecteditem end if case stop if not m_ftpconnection.closeconnection then if m_ftpconnection.ftpgetlasterror = error_ftp_user_transfer_in_progress then dim intretval as integer intretval = msgbox(data transfer in progress. do you want to cancel the data transfer?, vbyesno
27、+ vbquestion) if intretval = vbyes then m_ftpconnection.canceltransfer end if end if end if case refresh call refreshdirectory case download mnudownload_click case upload mnuupload_click case createdirectory mnucreatedir_click case delete mnudelete_click case rename mnurename_click case view large i
28、cons lvlistview.view = lvwicon case view small icons lvlistview.view = lvwsmallicon case view list lvlistview.view = lvwlist case view details lvlistview.view = lvwreport end selectend subprivate sub mnufileclose_click() unload the form unload meend subpublic function formatfilesize(lfilesize as lon
29、g) as string on error goto error_handler if lfilesize = 1024 then formatfilesize = format$(cstr(lfilesize / 1024), # # # kb) cstr 转换为string类型 else formatfilesize = cstr(lfilesize) & & bytes end if exit functionerror_handler: debug.print err.number & & err.descriptionend functionprivate sub tvtreevie
30、w_dragdrop(source as control, x as single, y as single) source只正在被拖动的控件,x,y指鼠标指针在目标对象中的坐标值 if source = imgsplitter then sizecontrols x end ifend subprivate sub addfiletolistview(oftpfile as cftpfile) dim inticon as integer dim strfilename as string strfilename = oftpfile.filename inticon = getimagen
31、umber(strfilename) set lvitem = lvlistview.listitems.add(, strfilename, strfilename, inticon, inticon) lvitem.subitems(1) = oftpfile.filesize lvitem.subitems(2) = oftpfile.lastwritetimeend subprivate sub refreshdirectory() with tvtreeview.selecteditem 从treeview中移除所有subfolders if .children 0 then for
32、 i = 1 to .children tvtreeview.nodes.remove (.child.index) next i end if lvlistview.listitems.clear listfiles tvtreeview.selecteditem end with end subprivate sub establishconnection()dim tvnode as nodedim f as new frmconnectf.show vbmodal 显示连接窗体的内容if f.action = comdok then 当按下ok时,清空treeview和listview
33、的内容 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(, , , .cu
34、rrentdirectory, 1) tvnode.key = .currentdirectory set tvtreeview.selecteditem = tvnode listfiles tvnode, true end if .connect end with m_ftpconnectionend if f.action = comdokend sub5.2.2 frmconnect窗体的部分代码public property get username() as string username = mvarusernameend propertypublic property get
35、password() as string password = mvarpasswordend propertypublic property get url() as string url = mvarurlend propertyprivate sub chkanonym_click()if chkanonym.value then txtusername = anonymous txtpassword.passwordchar = txtpassword = guest frame3.caption = your e-mail addresselse txtusername = txtp
36、assword.passwordchar = * txtpassword = frame3.caption = passwordend ifend subprivate sub cmdcancel_click()mvaraction = comdcancelunload meend subprivate sub cmdok_click()if len(txturl) = 0 then msgbox enter a url or click on cancel button., vbokonly + vbinformation, invalid url exit subelse mvarurl
37、= lcase(txturl.text)end ifif len(txtusername.text) = 0 then mvarusername = vbnullstringelse mvarusername = txtusername.textend ifif len(txtpassword.text) = 0 then mvarpassword = vbnullstringelse mvarpassword = txtpassword.textend ifmvaraction = comdokunload meend subpublic property let action(byval
38、vdata as command) mvaraction = vdataend propertypublic property get action() as commandused when retrieving value of a property, on the right side of an assignment.syntax: debug.print x.action action = mvaractionend property5.2 运行结果5.2.1 开始界面(见图一) (图一)5.2.2 用户点击file-connect to 或工具栏上的连接后的界面(见图二)(匿名方式
39、)(非匿名)(图二)5.2.3用户与ftp服务器主机地址ftp:/vip:vip8860 连接成功的界面(见图三) (图三)分析: 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 / is current directory.表示路径
40、已建立; port 192,168,18,128,4,76 表示当前客户端的ip为28 ,端口号为4*256+76=1100; 200 port command successful. 表示命令执行正常结束; 150 opening ascii mode data connection for /bin/ls 表示文件状态正确,正在打开数据连接; 226 transfer complete表示正在关闭数据连接。请求文件动作成功结束(例如,文件传送或终止); 在左侧列的是远程服务器提供给用户共享的文件夹,右侧列的是文件夹所包含的文件,并列出文件的图标,大小和最近更改日期。
41、 5.2.4用户从ftp主机上下载文件,保存到本地的subject文件夹中(见图四)(图四)5.2.5文件下载成功:(见图五) (图五)6 使用说明6.1 界面使用说明 (图六)如图六,从左到右的功能依次为建立连接,返回上一级 ,停止文件传输,刷新,下载,上传,create new directory,删除文件,重命名,显示大图标,显示小图标,显示列表,显示详细信息。 同时用户也可以在文件菜单中执行相关的操作。 6.2 代码的对应含义说明120服务在nnn时间内可用;125数据连接已经打开,开始传送数据;150文件状态正确,正在打开数据连接;200命令执行正常结束;202命令未被执行,此站点不支持此命令;211系统状态或系统帮助信息回应;212目录状态信息;214关于如何使用本服务器或特殊的非标准命令。此回复只对人有用;220 新连接的用户的服务已就绪;225数据连接已打开,没有进行中的数据传
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 改网签合同模板
- 出租门市协议合同模板
- 2024年合同相对性及其在租赁合同中的应用
- 奶牛出售转让合同模板
- 按摩生意出售合同模板
- 出租拆迁合同模板
- 信息安全数据泄露的预防与应对措施四考核试卷
- 工业旧厂子出租合同模板
- 中药买卖合同模板
- 延安租房合同模板
- 人教鄂教版四年级上册《声音的产生》课件
- (完整版)标书密封条格式word
- 二年级上册科学课件-《4.神奇的纸》教科版 (共20张PPT)
- 《关于汉语规范化的意义探析》
- 《应用光学》第二版 胡玉禧 第二章 作业参考题解
- 湘教版高中地理必修1自然地理环境的整体性教案
- 大学生职业生涯规划与就业指导课件(全套)
- CT影像诊断学课件
- 中医医院骨伤科医疗质量管理检查评分细则
- 带状疱疹病例讨论
- 田径比赛裁判工作方法与安排
评论
0/150
提交评论