计算机网络课程设计书FTP服务的设计与实现_第1页
计算机网络课程设计书FTP服务的设计与实现_第2页
计算机网络课程设计书FTP服务的设计与实现_第3页
计算机网络课程设计书FTP服务的设计与实现_第4页
计算机网络课程设计书FTP服务的设计与实现_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计书第3页共36页四川理工学院课程设计书系别:计算机学院专业:计算机网络班级:FTP服务的设计与实现题目:计算机网络技术教师:学生:目录第一章序言 31.1课题来源 31.2开发工具 3第二章系统需求分析 52.1功能需求 52.2系统模型设计 52.3系统工作流程设计 6第三章系统总体设计 63.1需求规定 63.2运行环境 73.3基本设计概念和处理流程 7第四章系统详细设计 134.1实现功能 134.2函数说明 134.2.1界面设计代码 134.2.2功能实现函数 13第五章系统实现 205.1界面设计的实现 205.1.1连接服务器 205.1.2获取文件列表 215.1.3断开服务器 215.1.4上传文件 225.1.5下载 245.1.6重命名 265.1.7删除 275.1.8刷新 295.1.9返回上一目录 295.1.10查看日志信息 30第六章测试、运行与维护 316.1测试 316.2单元测试 316.3功能测试 326.4安装、部署测试 326.5系统综合测试 336.6系统运行及维护 33第七章总结 34第八章参考文献 34第一章序言——杨小兰1.1课题来源FTP(FileTransferProtocol,FTP)是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unencode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间会非常长,并且不时的必需执行一些冗长的登陆进程。FTP服务一般运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话会被防火墙断开,传输会产生一些错误。FTP客户端主要目标是:促进文件的共享(计算机程序或数据);鼓励间接或者隐式的使用远程计算机;向用户屏蔽不同主机中各种文件存储系统的细节;可靠和高效的传输数据。因此,开发FTP客户端成为一个很有必要的事情。1.2开发工具随着程序设计技术的改革和计算机环境的改变,Java语言也得到了迅速发展。一方面,C++等面向对象程序设计语言的发展为Java提供了基础。事实上,Java也大量继承了C以及C++的成果,并增加了体现程序设计发展状态的功能。另一方面,网络及Internet的发展对程序设计提出了新的要求,为Java的发展注入了强大的动力。正是Internet的快速发展和普及,改变了传统的计算模式,促进了Java的普及与流行。它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,以“Java”的名称正式发布。Java编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心,Java舍弃了C++语言中容易引起错误的指针(以引用取代)、运算符重载(operatoroverloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在JavaSE1.5版本中,Java又引入了泛型编程(GenericProgramming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的执行速度有了大幅提升。与传统程序不同,Sun公司在推出Java之际就将其作为一种开放的技术。全球数以万计的Java开发公司被要求所设计的Java软件必须相互兼容。“Java语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。Java编程语言的主要特性是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。第二章系统需求分析——许平2.1功能需求1.实现一个图形用户界面的FTP客户端,保证文件的安全传输和存储。2.通过输入服务器地址、用户名和密码、可以实现远程FTP主机的登录。3.提供本地文件的上传功能,可对FTP主机文件进行下载、上传、删除、重命名等文件操作。4.可以查看一系列的操作的日志信息。2.2系统模型设计控制进程控制进程数据传送进程用户接口命令与应答控制连接数据连接文件传输数据传送进程控制进程服务器客户端FTP的基本模型2.3系统工作流程设计客户端用户客户端用户登录登录验证操作内容列表查看文件列表连接成功至服务器端上传文件重命名文件上翻文件列表删除文件下翻文件列表下载文件文件管理连接失败退出FTP设计总流程图FTP设计总流程图第三章系统总体设计——杨小兰3.1需求规定3.1.1FTP的文件上传及下载功能:类似于普通ftp的文件上传和下载功能。用户输入ftp的服务器ip及用户名,密码,连接服务器并上传或下载用户指定的文件。如果用户不输入用户名,密码则默认为匿名登录。可以以列表的形式显示服务器连接信息,以表格的形式显示正下载文件的信息。具有站内搜索功能。资源实时检索功能:提供一个强大的搜索引擎功能,用户只需提供关键字和需要检索的资源的类型,就能检索到上面所述四种子平台上的所有相关资源,并且列出来的资源都是可使用的。资源预览功能:对于服务器上的某些资源,用户可以选择预览,以确定是否下载。资源统计信息的功能:包括最近更新的资源,网上评论较热门的资源等。提供一个详细的列表,方便用户浏览。.2.系统的速度要在用户可接受的范围内,但考虑到需要实时检测服务器的可用性,对资源实时搜索的速度可以有较低的要求。ftp的文件上传和下载速度要尽量的接近于普通ftp的速度。3.1.2.系统要有较高的可靠性,可恢复性。3.1.2.系统要有良好的接口,以适应增加资源平台,增加资源类型,增加相关的资源获取功能的需求;并留有服务器接口,适应对以后实现服务器功能的需要;同时系统还需要具有跨平台功能。3.1.3于ftp和资源实时检索功能系统的输入数据分为两种类型,如果用户已知服务器ip,用户名,密码,则输入数据为服务器ip,用户名,密码;如果用户只知道需要的资源名称和类型,则输入需要的资源名称和类型。系统输出为用户需要的资源列表。并下载用户选择的文件。对于预览功能,用户需要选择要预览的文件,系统输出该文件的一部分或全部内容,如果用户选择保存预览内容,则保存。3.1.4系统需要记录用户最近连接过的ftp的地址,用户名,密码及该站点的文件列表。3.1.5具有一定的容错能力,能检测用户的错误输入并给出错误提示,能检测资源的可用性错误并输出结果。能进行系统故障恢复。3.1.6因为本系统是一个普遍使用的工具,所以要求界面友好,使用方便,并要求系统具有高稳定性,可扩充性和运行环境的可转换性。3.2运行环境3.2.1普通pc机,互联网。3.2.2操作系统:windows或linux其它软件:jdk该系统早期会使用北大天网FTP搜索引擎和其他的文件搜索系统如百度的功能实现资源的检索,但是在后期时间允许的情况下会开发自己的检索部分。3.3基本设计概念和处理流程活动者:用户,即使用系统进行资源上传下载,站内搜索,资源实时检索,资源预览和资源统计信息的人。用况说明:用况名称:上传参与者:用户主要事件流:1.用户输入ftp的ip及用户名,密码。2.系统连接ftp。3.用户选择资源并选择上传功能。4.系统运行上传功能,并显示资源上传信息。异常事件流:1.用户输入的ftp无法连接。2.显示ftp无法连接,并提示原因,如无法找到此ftp,用户名或密码错误,ftp连接人数已满等等。异常事件流:1.资源上传出错。2.显示资源上传错误,并提示原因,如无上传权限,ftp空间已满等等。用况名称:下载参与者:用户主要事件流:1.用户输入ftp的ip及用户名,密码。2.系统连接ftp。3.用户选择资源并选择下载功能。4.系统运行下载功能,并显示资源下载信息。异常事件流:1.用户输入的ftp无法连接。2.显示ftp无法连接,并提示原因,如无法找到此ftp,用户名或密码错误,ftp连接人数已满等等。异常事件流:1.资源下载出错。2.显示资源下载错误,并提示原因,如无下载权限,用户磁盘空间已满等等。用况名称:站内搜索参与者:用户主要事件流:1.用户输入需要搜索的资源名称关键字。2.系统进行站内搜索并显示搜索结果。用况名称:资源实时搜索参与者:用户主要事件流:1.用户输入需要搜索的资源名称关键字,选择需要的资源类型。2.系统进行实时检索。3.输出检索结果。4.用户在检索结果中选择需要的资源。5.系统连接用户选择的资源,并显示。异常事件流:1.实时检索出错。2.显示错误。用况名称:预览参与者:用户主要事件流:1.用户选择需要预览的资源并选择预览功能。2.系统显示资源的内容。3.用户选择保存预览资源。4.系统将该资源保存到用户选择的目录。异常事件流:1.预览出错。2.系统显示出错信息。用况名称:统计资源信息参与者:用户主要事件流:1.用户输入需要统计信息的资源类型。2.系统统计资源的信息。3.显示资源的统计信息。异常事件流:1.统计资源信息出错。2.系统显示出错信息。系统的主要使用流程:2.4结构系统物理结构图:图2系统物理结构图系统模块图图3系统模块图

ui:系统界面部分,负责接受用户输入,显示系统输出,负责其他模块功能的协调调用,并含有站内搜索功能,即在用户指定的已打开的ftp站点中搜索用户需要的资源。ui部分调用common部分的功能读取xml文件中保存的界面元素属性信息,用户最近访问过的10个ftp信息,用户选择的下载的ftp内容列表及其他需要通过xml文件保存的信息。client:实现ftp客户端的功能,ftp连接,ftp上传及下载:上传或下载用户指定的资源,并返回相应的信息。search:资源实时检索部分,根据用户输入的资源名称关键字,资源类型和选择的检索方式检索用户需要的资源,并验证资源的可用性,返回可用资源及其大小,速度等相关信息。preview:资源预览部分,显示用户选择的资源的部分内容,以使用户决定是否需要该资源。preview部分调用common部分读取属性文件的内容以设置预览资源内容的显示格式。2.5功能需求与系统模块的关系Cilentuisearch统计资源信息previewftp上传及下载√资源站内搜索√资源实时检索√统计资源信息√预览√第四章系统详细设计——任杰4.1实现功能用户登陆、用户退出、文件上传、文件下载、文件重命名文件删除、上翻文件目录、下翻文件目录界面实现部分:设计为一个用户界面,上面包括各种用户按钮、文本输入栏、状态栏等等。具体如下:服务器地址信息输入栏、端口信息输入栏、用户名、密码输入栏、用户登陆(连接)按钮、用户退出(断开连接)按钮、服务器文件显示列表框、下载文件按钮、上传文件按钮、重命名文件按钮、删除文件按钮、上一级目录按钮,下一级目录按钮,状态栏。4.2函数说明4.2.1界面设计代码每个按钮对象注册监听器对应相关的业务逻辑,调用FtpBean类中的对应方法。下面是页面部分实现的主要代码以及相关说明:packageftp;importjava.awt.event.*;importjava.awt.*;importjava.util.*;importjava.util.List;importjava.util.StringTokenizer;importjava.io.*;importjavax.swing.*;importjavax.swing.event.*;publicclassFTPextendsJFrame{ FtpBeanftp=newFtpBean(); //FTP客户端对象privateFileWriterwrite;privatePrintWriterout;privateDatetime;privateJTextFieldurl=newJTextField();//FTP服务器地址privateJTextFieldport=newJTextField();//FTP服务器端口privateJTextFieldusername=newJTextField();//用户名privateJTextFieldpassword=newJTextField();//密码privateJTextFieldstatus=newJTextField();//当前状态privateJButtonconnectButton=newJButton("连接");//连接按钮privateJButtoncloseButton=newJButton("断开连接");//断开连接按钮privateJPopupMenupopup=newJPopupMenu();;privateJMenuItemrefresh=newJMenuItem("刷新");//右键弹出菜单privateJMenuItemdelete=newJMenuItem("删除");privateJMenuItemdownload=newJMenuItem("下载");privateJMenuItemupload=newJMenuItem("上传");privateJMenuItemrename=newJMenuItem("重命名");privateJMenuItemupDir=newJMenuItem("上级目录");privateJMenuItemshowLog=newJMenuItem("显示日志信息");finalDefaultListModelm=newDefaultListModel();//显示文件列表JListfileList=newJList(m);JScrollPanefileScrollPane; privateDimensionfaceSize=newDimension(400,600);//框架大小publicFTP(){init();createPopup();//弹出菜单time=newDate();try{write=newFileWriter("log.txt",true);out=newPrintWriter(write,true);}catch(IOExceptionioe){ ioe.printStackTrace();}status.setEditable(false);this.add(status,BorderLayout.SOUTH);//下方connectButton.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){connect();}});closeButton.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){close();time=newDate();out.println(time+"离开服务器:"+url.getText());}});this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//添加框架的关闭事件处理this.pack();this.setSize(faceSize);//设置框架的大小DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();this.setLocation((int)(screenSize.width-faceSize.getWidth())/2,(int)(screenSize.height-faceSize.getHeight())/2);this.setResizable(false);this.setTitle("FTP服务端"); //设置标题setVisible(true);this.addWindowListener( //关闭程序时的操作newWindowAdapter(){publicvoidwindowClosing(WindowEvente){close();System.exit(0);}});}voidinit(){ContainercontentPane=getContentPane();//获取面板contentPane.setLayout(newBorderLayout());//设置布局 JPanelup=newJPanel(); //设置面板上方控件布局up.setLayout(newGridLayout(3,2)); url.setText("26");port.setText("21");username.setText("gaojin");password.setText("gaojin");JPanelno1=newJPanel(); no1.setLayout(newBorderLayout());no1.add(newJLabel("服务器:"),BorderLayout.WEST);no1.add(url,BorderLayout.CENTER);JPanelno2=newJPanel(); no2.setLayout(newBorderLayout());no2.add(newJLabel("端口号:"),BorderLayout.WEST);no2.add(port,BorderLayout.CENTER);JPanelno3=newJPanel(); no3.setLayout(newBorderLayout());no3.add(newJLabel("用户名:"),BorderLayout.WEST);no3.add(username,BorderLayout.CENTER);JPanelno4=newJPanel(); no4.setLayout(newBorderLayout());no4.add(newJLabel("密码:"),BorderLayout.WEST);no4.add(password,BorderLayout.CENTER);up.add(no1);up.add(no2);up.add(no3);up.add(no4);up.add(connectButton);up.add(closeButton);closeButton.setEnabled(false);this.add(up,BorderLayout.NORTH); //上方 fileScrollPane=newJScrollPane(fileList,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);fileScrollPane.setPreferredSize(newDimension(300,400));this.add(fileScrollPane,BorderLayout.CENTER);//中部 }4.2.2功能实现函数使用SUN公司提供的FTP客户端类库。主要包括4个类:.TelnetInputS.TelnetOutputS.ftp.FtpC.ftp.FtpLoginException编写FtpBean类实现业务逻辑,包含一个FtpClient类的对象ftpClient。包含的方法如下:(1)建立连接Stringconnect(Stringdir,Stringhostname,intport,Stringusername,Stringpasswd)使用ftpClient=newFtpClient(hostname,port);ftpClient.login(username,passwd);(2)获取文件名列表List<String>getFileNameList()使用InputStreamReaderisr=null;BufferedReaderbr=null;isr=newInputStreamReader(this.ftpCList(this.getDir()));br=newBufferedReader(isr);获取输入流来得到目录中的文件信息(3)判断路径booleanisDir(Stringline)使用line.startsWith("d")来判断(4)设置路径booleansetPath(Stringpath) 使用ftpClient.cd(path);实现(5)上传文件booleanuploadFile(StringlocalFile,StringtargetFileName)使用ftpClient.cd(path);实现(5)上传文件booleanuploadFile(StringlocalFile,StringtargetFileName)使用TelnetOutputStreamtos=null;RandomAccessFilesendFile=null;DataOutputStreamdos=null;try{Filefile=newFile(localFile);sendFile=newRandomAccessFile(file,"r");sendFile.seek(0);tos=this.ftpClient.put(targetFileName);dos=newDataOutputStream(tos);intch=0;while(sendFile.getFilePointer()<sendFile.length()){ch=sendFile.read();dos.write(ch);}获取文件输出流,读取数据并写入文件(6)下载文件booleandownloadFile(StringsrcFileName,StringtargetFileName)使用TelnetInputStreamtis=null;RandomAccessFilegetFile=null;booleanresult=true;try{Filefile=newFile(targetFileName);getFile=newRandomAccessFile(file,"rw");getFile.seek(0);tis=this.ftpClient.get(srcFileName);DataInputStreamdis=newDataInputStream(tis);intch=0;while(true){ch=dis.read();if(ch<0){break;}getFile.write(ch)}getFile.close();}获取文件输入流,读取数据并写入文件(7)进入上一级文件目录up()使用ftpClient.cdUp();实现(8)进入下一级文件目录downDir()使用上面的方法来实现下一级文件目录的访问(9)给文件重命名booleanrenameFile(StringoldName,StringnewName)使用ftpClient.rename(oldName,newName);来实现(10)删除文件deleteFile(StringfileName)使用Stringcmd="DELE"+fileName+"\r\n";ftpClient.sendServer(cmd);来实现(11)获取当前路径StringgetDir()使用returnthis.ftpClient.pwd();实现(12)关闭连接Stringclose()使用ftpClient.closeServer();实现

第五章系统实现——杨小兰,许平,任杰5.1界面设计的实现5.1.1连接服务器单击连接若服务器名称、端口、用户名和密码对的前提下登录到指定的服务器上面,弹出“登录成功”对话框,并在下方状态栏中显示“登录成功5.1.2获取文件列表登录到服务器上面之后,获取在服务器用户的主文件及文件夹并在下方状态栏显示5.1.3断开服务器当用户需要关闭连接时,单机“断开连接”就可断开与服务器的连接,在状态栏上显示“连接已断开”,此时并不退出客户端。5.1.4上传文件右击弹出快捷菜单单击上传显示上传对话框选择需要上传的文件单击打开即可上传,上传成功显示“上传成功”对户框,并在状态栏显示当前状态5.1.5下载单击下载弹出下载主机路径,指定目录以及文件名称,单击打开 下载成功会弹出对话框“下载文件+源文件具体目录+成功”5.1.6重命名 选中需要重命名的文件或者文件夹,右击弹出快捷菜单,单击重命名在弹出的对话中输入新的名称,然后单击确定弹出重命名成功的消息框5.1.7删除选中需要删除的文件,右击弹出快捷菜单,单击删除弹出删除文件成功消息框此时的文件夹已经把选中的从列表中移除5.1.8刷新当进行上传,重命名、删除或者服务器更新列表时,文件列表没有及时更新,可以点击刷新按钮进行显示5.1.9返回上一目录在文件夹子目录需要返回上一级目录时,单击“上级目录”即可以实现5.1.10查看日志信息日志信息是对用户操作的记录,如果需要查看,单击查看日志信息即可打开记录日志的文件

第六章测试、运行与维护安全FTP服务器系统具有很强的交互性,在开发中会有很多问题是不能通过想象和经验进行预计和处理的,因此只能通过测试等软件开发手段来发现问题并解决问题。6.1测试该系统的主要进行了以下几个方面的测试:单元测试、功能测试、性能测试、安装/部署测试等。6.2单元测试为了确保在开发中实现了所有的需求,同时也为了使项目代码满足各种编码规范,在正式测试之前对代码进行了人工排查,对系统进行了静态单元测试——代码审查。程序中有齐全的各种注释:各种方法都有功能描述,方法中的功能模块具有功能的相关描述;参数和返回值也有相关的文字描述;除局部变量外都进行了变量的含义注释。方法,变量等都使用了统一的命名规范。本系统的开发完全遵照C#的编码规范,如代码按行进行书写,一行只有一个语句等等,变量使用camelCase(驼峰)命名规范进行命名。命名空间也使用了规范的命名规则和组织规则。如上这些规范都可以提高代码的可读性和系统的可维护性。通过代码审查可以发现一些显而易见的逻辑错误和功能缺失,这些先期的处理可以为后面的测试节省时间和测试代价。6.3功能测试功能测试主要是对需求中的各功能要求进行测试性运行,保证系统的正确运行。在测试中,首先进行了用户界面和适用性的测试。使产品更具人性化,人们在使用时更加灵活、舒适,提高软件使用者——客户的体验。使用基于功能需求的回归测试对项目进行各个功能的验证。在测试中发现功能缺陷或其他的不足,返回到代码中修改这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论