《毕业设计论文基于C语言的FTP软件的设计.doc》由会员分享,可在线阅读,更多相关《毕业设计论文基于C语言的FTP软件的设计.doc(18页珍藏版)》请在三一办公上搜索。
1、基于C语言的FTP软件的设计摘 要文件传输协议 (File Transfer Protocol, FTP),它是目前Internet上使用得最广泛的文件传送协议。起初,FTP并不是应用于IP网络上的协议,而是20世纪6080年代美国国防部组建的ARPANET网络中,用于计算机间的文件传输的协议。时至今日,FTP仍然保持其可靠性,高速地传输文件,它还允许文件远程存取。这使得用户可以在某个系统上工作,而将文件存贮在别的系统。为了用户更方便的使用FTP服务,提供更好的人机交互界面,本课题将使用JAVA以及JBuilder的ftpclient库,基于Client/Server的架构方式,编写一个友善界
2、面的FTP客户端工具,实现服务器连接、远程与本地目录浏览、文件上传和下载等基本FTP工具常用功能。 关键词: FTP;上传;下载The Design and Implementation of FTP ClientAbstractFile Transfer Protocol (FTP), which is the most widely used protocol for transmission at present. In the beginning, the FTP is not used on the IP network, but used in the United States
3、Department of Defense network for the computer file transfer agreement in the 1960s to 1980s. Today, FTP is maintaining its reliability, high-speed transmission of documents, it also allows remote access to documents, Users can manipulate data in other different system, to make users more convenient
4、 use FTP services, have a better man-machine interface, this system will be written by Java, JBuilder, and the ftpclient library. Basing on Client/Server structures, to prepare a FTP client tool with a friendly interface, it can login to the server, browse remote and local directory, upload and down
5、load.Key words: FTP; Upload; Download目 录论文总页数:20页 1 引言11.1选题背景11.2 选题目的12 相关基础技术与开发平台12.1 JAVA技术12.1.1 JAVA简介12.1.2 C/S架构简介22.2 FTP基础32.3 开发平台43系统需求分析与总体设计43.1 需求分析43.2 设计思路53.3实现思路54 系统模块的实现74.1 界面模块实现74.2 登录模块实现84.3 浏览程序104.3.1浏览服务器端目录程序104.3.2本地浏览程序124.4文件下载和上传程序134.4.1文件下载程序134.4.2文件上传程序135 系统测试
6、及问题处理155.1测试环境155.2 测试结果155.2.1登录模块测试155.2.2系统兼容性测试165.3 测试总结16结 论17参考文献18第 14 页 共 20 页1 引言1.1选题背景FTP是互联网上使用最广泛的文件传输协议。在互联网早期曾占据整个互联网通信量的三分之一。它主要解决了在不同操作系统下处理文件格式的不兼容性。FTP客户端应该包含以下功能:登录,浏览目录,上传下载。传统方式需要在DOS下输入命令,对于普通用户是件极困难的事。但有了FTP客户端软件后,只要轻点几下鼠标即可完成所有操作。它已成为人们不可或缺的软件之一了。本毕业设计将介绍FTP客户端系统的设计和开发工作,因此
7、,文章将涵盖以下三个方面的内容:1.基础技术知识介绍; 2.文件传输系统的详细需求;3.介绍系统的具体实现;4.对最终系统进行测试。通过这次课题,对整个开发过程有深入的了解,提高实践能力。FTP将在未来的很长时间里作为主要的文件传输协议,使用前景仍然宽广,功能会更加强大。1.2 选题目的FTP是Internet上使用最广泛、是共享资源的主要途径之一。FTP服务是以它所使用的文件传输协议(File Transfer Protocol)命名的。它的特点是访问方便,操作简单,易于管理。如今Internet上有许多的资源都是以FTP的形式提供的,包括各种文档、软件工具包等等。选择此课题作为毕业设计,是
8、希望将平日学习累积的知识用于实践,开发出该系统的各项功能,使用户很简单的就能登录FTP服务器、上传下载数据等功能的需求。与此同时,在开发中学会发现解决问题,提高JAVA开发能力,为今后的工作、学习、项目开发累积实践经验。所以选择了Java语言来开发实现文件传输功能的FTP客户端。2 相关基础技术与开发平台综合个人平日学习内容和语言掌握的熟练度情况,选用了JAVA作为该系统的编程语言,JBuilder 9作为开发的平台。系统界面模块可以使用Swing、AWT,制作出其GUI部分。2.1 JAVA技术2.1.1 JAVA简介Java是Sun公司推出的一种编程语言。Java语言的设计集中于对象及其接
9、口,它提供了简单的类机制以及动态的接口模型,高度抽象,采用纯面向对象编程的思想和方法。Java还带有很多的扩展的类包(Package),在程序中可以轻松调用,简化程序员的工作。Java程序运行的硬件或软件环境,称为平台。Java平台包括2个部分:Java虚拟机和Java应用程序接口。Java API:Java应用程序接口,用于Java程序的使用和Java虚拟机的接口。Java虚拟机用于将Java字节码翻译成特定机器码。基于硬件的平台,即Java程序运行的特定的硬件环境。图1 JAVA平台 2.1.2 C/S架构简介客户机/服务器在分布处理过程中,使用基于连接的网络通信模式。该通信模式首先在客户
10、机和服务器之间定义一套通信协议,并创建一Socket类,利用这个类建立一条可靠的链接;然后,客户机/服务器再在这条链接上可靠地传输数据。客户机发出请求,服务器监听来自客户机的请求,并为客户机提供响应服务。这就是典型的“请求-应答”模式。下面是客户机/服务器的一个典型运作过程: l(1)服务器监听相应端口的输入; l(2)客户机发出一个请求; l(3)服务器接收到此请求; l(4)服务器处理这个请求,并把结果返回给客户机; (5)上述过程,直至完成一次会话过程。图2 2层C/S结构图2.2 FTP基础文件传送协议FTP(File Transfer Protocol)是Internet文件传送的基
11、础。通过该协议,用户可以从一个Internet主机向另一个Internet主机拷贝文件。与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。在FTP的使用当中,用户经常遇到两个概念:下载(Download)和上载(Upload)。“
12、下载”文件就是从远程主机拷贝文件至自己的计算机上;“上载”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上载(下载)文件。图3 系统工作简易流程FTP客户端设计的原理,FTP使用两条TCP连接来完成文件传输:控制连接与数据连接。控制连接用于传输控制,数据连接用于数据输送。在服务器启动后,服务器就会在端口21等待客户的连接请求,有用户需要传输文件时,客户与服务器的端口21建立一个控制连接,用来传送客户的命令和服务器的应答,该连接一直保持到客户与服务器通信结束为当客户发出数据传输命令时,服务器会主动与客户建立数据连接,并与其进行数据
13、交换。客户端用户并不直接处理控制连接上的FTP命令和FTP响应,而是由两个协议解释器进行处理。用户接口为客户端用户提供一定形式的输入界面,接收用户的命令,将其转换成标准的FTP命令,最终将控制连接上的FTP响应转换成用户可理解的方式。在客户与服务器的整个连接期间,控制连接必须保持,而数据连接却可以根据请求动态地建立和关闭。在最常用的流模式中,文件结束是用数据连接的关闭来表示的,换句话说,每传输一个文件或文件列表,系统就会再建立一个新的数据连接。图4 FTP使用的两个TCP连接2.3 开发平台本文件传输系统是采用Borland公司公司推出的JBuilder作为开发平台,它是一款优秀的Java I
14、DE集成开发环境工具,JBuilder 9是目前的较新的版本它比以前的版本更加简单和直观,方便上手在这个版本中Borland集成目前众多JAVA开发的优秀技术,如:工程管理、单元测试、代码审查、撰写Javadoc说明文档等等,极大的方便了Java开发人员的工作。如果用户既要求易于进行可视化布局,又要求有较大的灵活性,JBuilder就是最好的选择。3系统需求分析与总体设计3.1 需求分析3.1.1 用户需求软件要简单易上手,能够匿名或者使用帐号登录到用户指定的服务器上,进行访问和数据的上传下载。3.1.2 功能需求该系统主要包括以下几个方面:1.可视化的交互界面模块;2.登录服务器模块;3.浏
15、览服务器/本地目录和文件模块;4.上传/下载文件模块。由这四个模块构成该系统。3.1.3 性能需求:整个系统操作应当简便,界面友好,运行稳定,执行速度快。系统本身运行对计算机硬件平台和操作系统平台要求适中。3.2 设计思路上传下载程序主要完成文件的传输,是系统的核心模块。Jbuilder9提供的FTP控件已经对其进行了类封装,因而对用户而言它是透明的,不必再去编程解释响应消息等,这就是控件的好处。这样使用JBuilder9,就节约了大量的开发时间。即使对FTP不是很了解,都可以很快建立起一个FTP客户端程序来。由于本程序只是FTP客户端,下面将分别对整个系统的图形界面、登录模块、远程浏览模块、
16、本地浏览模块、上传模块和下载模块六大模块的程序实现细节进行详细介绍。登录模块服务器目录浏览模块上传模块本机目录浏览的设计FTP客户端下载模块图5 系统模块图3.3实现思路在Jbuilder9环境所提供的扩展包中,已经提供了一些网络类的类库.ftp.FtpClient.,该类库主要用于建立FTP连接的类。利用此类的方法,我们可以远程登录到FTP服务器,列出该服务器上的目录,设置传输协议,以及传送文件。FtpClient类涵盖了几乎所有FTP的功能,FtpClient的实例变量保存了有关建立代理的各种信息。当然,还有很多此类开源的库,可以实现FTP的功能。这里我采用了FtpClient作为此次毕业
17、设计的资源。以下是部分FtpClient的常用核心函数说明:FtpClient有三种不同形式的构造函数,此构造函数将创建一FtpClient类,但不建立FTP连接。如下:1. public FtpClient(String hostname,int port)此构造函数利用给出的主机名和端口号建立一条FTP连接。2. public FtpClient(String hostname)此构造函数利用给出的主机名建立一条FTP连接,使用默认端口号。3. FtpClient()一旦建立了类FtpClient,FTP连接可以用openServer方法建立,这个类的方法来打开与FTP服务器的连接。类ft
18、pClient提供了如下两个可用于打开与FTP服务器之间的连接的方法。1. public void openServer(String hostname)此方法用于建立一条与指定主机上的FTP服务器的连接,使用默认端口号。2. public void openServer(String host,int port)此方法用于建立一条与指定主机、指定端口上的FTP服务器的连接。打开连接之后,接下来的工作是注册到FTP服务器。这时需要利用下面的方法。此方法利用参数username和password登录到FTP服务器。public void login(String username,String
19、password)下面是FtpClient类所提供的一些控制命令。public void cd(String remoteDirectory)该命令用于把远程系统上的目录切换到remoteDirectory所指定的目录。public void cdUp():该命令用于把远程系统上的目录切换到上一级目录。public String pwd():该命令可显示远程系统上的目录状态。public void binary():该命令可把传输格式设置为二进制格式。此外,类FtpClient还提供了可用于传递并检索目录清单和文件的若干方法。这些方法返回的是可供读或写的输入、输出流。下面是其中一些主要的方法。
20、public TelnetInputStream list()返回与远程机器上当前目录相对应的输入流。public TelnetInputStream get(String filename)获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。public TelnetOutputStream put(String filename)以写方式打开一输出流,通过这一输出流把文件filename传送到远程计算机。4 系统模块的实现4.1 界面模块实现4.2 登录模块实现4.3 浏览程序我们利用FtpClient控件可以实现FTP客户端应用程序的浏览功能,
21、浏览功能的实现程序由浏览服务器端文件和浏览本地文件两部分组成。4.3.1浏览服务器端目录程序当连接登录成功之后,可使用FtpClient控件的List()方法执行FTP服务器端上的目录浏览(List)功能,以取得FTP服务器默认的目录内容。一般List方法会列出FTP端目录与文件的详细内容,包括创建文件日期,文件大小,目录与文件的名称等相关信息。当然,FTP服务器端必须开放目录读取的权限,以允许连接登录及浏览目录,否则,Connect方法会执行失败。而这个方法执行后的结果是TelnetInputStream数据流,本系统要把它显示在一个列表框中,还需要进行分解操作。下面是对列表框进行操作的程序
22、代码:/清空目录列表,调用List()方法获取文件列表。privatevoidReloadList()StringBufferbuf=newStringBuffer();intch;list1.removeAll();/清空目录列表try/调用List()方法得到目录表TelnetInputStreamt=ftp.list();t.setStickyCRLF(true);/分解TelnetInputStream数据流while(ch=t.read()=0)if(ch=n)/向列表框添加分解得到的目录和文件list1.add(getDIR(buf.toString();buf.setLength
23、(0);elsebuf.append(char)ch);/完成后关闭TelnetInputStream数据流t.close();catch(IOExceptionex)ex.printStackTrace();/刷新列表框的内容list1.validate();/分解字符串得到目录和文件名publicStringgetDIR(Stringpath)StringDIRName;intch;/分解字符串得到目录和文件名intbegin=55;DIRName=path.substring(begin).trim();returnDIRName;4.3.2本地浏览程序文件传输是一个双向的过程,它涉及到
24、客户端和服务器之间数据流传输的问题,人们不仅需要把服务器上的文件下载到指定的文件下,本地浏览程序通 过jTree1,jButton5和JFileChooser三种控件实现。jTree1用于显示当前选择目录中的所有文件和目录,jButton5和JFileChooser组合在一起用于选择需要的目录。其实现的源程序代码如下:/ 选择本地文件目录void jButton5_actionPerformed(ActionEvent e) JFileChooser JFileCh = new JFileChooser();/创建文件对话框JFileCh.setFileSelectionMode(JFileC
25、h.DIRECTORIES_ONLY);/只选择目录int returnVal = JFileCh.showOpenDialog(this);/显示文件对话框if(returnVal = JFileChooser.APPROVE_OPTION)File root2 = JFileCh.getSelectedFile();/得到根目录文件if(root2.isFile() root2=root2.getParentFile();/如果得到的不是目录,则使用他的目录DefaultMutableTreeNode rootTree2 = newDefaultMutableTreeNode(root2.
26、getPath();setTree(root2.getPath(),rootTree2);/遍历目录树model1.setRoot(rootTree2);/设置模型的根节点model1.reload();/重新构造树视图/end ifelseJOptionPane.showMessageDialog(this, 没有选择文件);/显示提示信息。图8 区分目录与文件图9 返回目录4.4文件下载和上传程序通过浏览程序对FTP服务器和本地文件系统的浏览,解决了客户端和服务器端的文件和目录选择的问题,但是文件数据是需要传送和交换的,下面我们将介绍如何实现文件的下载和上传等操作过程。 4.4.1文件下载
27、程序当我们想下载文件,可以使用TelnetInputStream流,并使用FTPClient控件的get方法将流的源头绑定,再将TelnetInputStream流绑定到DataInputStream流中,然后再在本地新建一个文件,并绑定到RandomAccessFile流中,执行DataInputStream流的读并写入RandomAccessFile流中,就可以完成下载功能了。当然,程序首先需要判断本地浏览框中选中的是目录还是文件,或者根本就没有在本地浏览框中选择。为了可同时选择多个文件下载,必须先设置list1控件的MultipleMode属性为true,以便能够在远程浏览框中进行多重选
28、择。接着在程序中利用list1控件对象的getSelectedItems方法获取所选择的文件和目录,并判断是否为目录;若是目录,则在本地创建一个目录(本实例没有使用递归的方法,所以不能下载目录中的文件和子目录),否则,将进行文件下载。一直重复至所有被选择文件或者目录都被完成操作为止。在这里,使用了一个isfile的boolean变量用于判断是否为文件。4.4.2文件上传程序上传文件基本上与下载文件类似,不过使用的是TelnetOutputStream流,并使用FTPClient控件的put方法和流绑定,再将TelnetOutputStream流绑定到DataOutputStream流中,然后在
29、本地新建一个文件,并绑定到RandomAccessFile流中,执行RandomAccessFile流的读并写入DataOutputStream流中,就可以完成上传功能了。代码如下:/上传文件到ftp目录voidjButton3_actionPerformed(ActionEvente)/上传文件到ftp服务器中if(jTree1.isSelectionEmpty()jTextArea1.append(没有选择本地文件上载n);elseFilefile1=newFile(conPath();/判断是否是文件,如果是目录则不与操作,以后的程序可能会考虑添加目录的操作if(file1.isFile
30、()Stringfilename=jTree1.getSelectionPath().getLastPathComponent().toString();intch;tryFilelocalFile=newFile(conPath();RandomAccessFilesendFile=newRandomAccessFile(conPath(),r);/上传文件到ftp服务器中sendFile.seek(0);TelnetOutputStreamouts=ftp.put(filename);DataOutputStreamoutputs=newDataOutputStream(outs);/上传
31、处理while(sendFile.getFilePointer()sendFile.length()ch=sendFile.read();outputs.write(ch);/上传完成,关闭输入输出流outs.close();sendFile.close();catch(IOExceptionex)ex.printStackTrace();/列表框需要重新刷新ReloadList();图10 上传与下载5 系统测试及问题处理5.1测试环境系统测试机器: CPU: AMD Athlon 2500+MAINBOARD: Epox 8RDA3+MEMORY: Kingston DDR 768MHAR
32、DDISK: WESTDIGITAL 120JB程序测试环境:Windows XP SP2Windows Server 2003Jbuilder 9JRE 1.4Serv-U v6.4.0.25.2 测试结果在本地系统安装FTP服务器端软件Serv-U,用于提供FTP服务,IP地址127.0.0.1,端口号使用默认端口21。创建FTP登录帐号,分配适当的权限。(Serv-U的安装和配置过程略过,可见该软件帮助文件。)5.2.1登录模块测试主要是利用FtpClient控件实现FTP客户端应用程序的登录功能。要登录FTP服务器,输入合法的用户帐号和密码,如是匿名登录用户帐号为Anonymous,密
33、码一般为空。详细设置参数:hostname:服务器的IP地址或主机名称,为字符串类型;port:服务器的通信端口,为int类型(FTP端口默认为21);username:用户的登录账号;password:用户的登录密码;这次毕业设计遇到的难点就是:连接到FTP服务器上,可以浏览它的内容,但不能识别文件夹。此问题后来通过使用搜索、BBS上发贴请教,最后算是顺利解决如何判断文件和目录。5.2.2系统兼容性测试经测试,该系统在WINDOWS 2003以及WINDOWS XP下均能正常工作。5.3 测试总结系统在上述软硬件环境下作出测试,结果基本能够达到预期功能,满足用户的基本的登录服务器,上传下载数
34、据的需求。并且系统在Windows平台上经测试能够稳定的运行。其中应注意几点,如:1.测试时最好将防火墙关闭或者降低安全级别; 2.登录帐号一定要是合法注册的,并在服务器端设置好正确的用户权限。否则就可能无法正常连接到服务器,上传下载数据。不足之处在于上传下载过程中无法得知过程进度、剩余时间等信息,对用户上传较大文件时会造成一定的不方便。能加入断点传输的话更佳,由于ftpclient不自带断点传送功能,如今后该系统增加此功能会比较困难。总的来说,测试内容较少,可能会存在一些BUG,与现实生活中大家使用的那些FTP下载软件有相当的距离。对此,还更应该的深入的学习Java语言中的那多重要的类库,更
35、全面的了解他们的功能,争取完善其功能。 结 论在老师的指导和督促下,经过紧张的设计与开发,我的毕业设计课题FTP客户端软件的设计与开发终于开发完成了,虽然该系统功能上还有许多不足,但通过这几个月的钻研,从拟定方案,设计模块,解决开发过程中遇到的各种困难,最终实现了该文件传输系统的基本功能。此系统操作界面简洁易懂,普通用户也能很快上手;此系统实现了远程登录服务器、浏览本地与服务器目录文件和数据上传下载等功能需求,从而实现了一个简易的FTP客户端软件。通过自己实际设计并开发一个FTP客户端软件,使我了解了C/S开发模式和FTP的发展历史及工作原理,对FTP协议在网络中的结构和本身协议在传输的作用有
36、了更深的认识。通过系统测试,我又了解了软件测试的理论知识,理解了测试的概念,了解了测试方法以及过程,虽然只是很有限的尝试和使用,但我尽量通过所学的知识从中寻找错误和不足,也对我今后做类似项目起到了积极的指导作用,总的说来此次课题我受益颇丰。参考文献1 Herbert Schildt.Java实用教程M.北京:清华大学出版社,2005。2 胡月,叶曙光,徐饪.Jbuilder9入门与提高M.北京:科学出版社,2004。3 耿祥义,张跃平.JAVA2实用教程(第二版)M.北京:清华大学出版社,2004。4 杨树林,胡洁萍.JAVA语言最新实用案例教程M.北京:科学出版社,2006。5 W.Richard Stevens.TCP/IP详解 卷1:协议M.北京:机械工业出版社,2000。6 谢希仁.计算机网络(第四版)M.北京:电子工业出版社,2005。