图3 系统工作简易流程 http://www.paper51.com FTP客户端设计的原理,FTP使用两条TCP连接来完成文件传输:控制连接与数据连接。控制连接用于传输控制,数据连接用于数据输送。在服务器启动后,服务器就会在端口21等待客户的连接请求,有用户需要传输文件时,客户与服务器的端口21建立一个控制连接,用来传送客户的命令和服务器的应答,该连接一直保持到客户与服务器通信结束为当客户发出数据传输命令时,服务器会主动与客户建立数据连接,并与其进行数据交换。 paper51.com 客户端用户并不直接处理控制连接上的FTP命令和FTP响应,而是由两个协议解释器进行处理。用户接口为客户端用户提供一定形式的输入界面,接收用户的命令,将其转换成标准的FTP命令,最终将控制连接上的FTP响应转换成用户可理解的方式。在客户与服务器的整个连接期间,控制连接必须保持,而数据连接却可以根据请求动态地建立和关闭。在最常用的流模式中,文件结束是用数据连接的关闭来表示的,换句话说,每传输一个文件或文件列表,系统就会再建立一个新的数据连接。 copyright paper51.com 内容来自www.paper51.com 图4 FTP使用的两个TCP连接 内容来自www.paper51.com 2.3 开发平台 copyright paper51.com
本文件传输系统是采用Borland公司公司推出的JBuilder作为开发平台,它是一款优秀的Java IDE集成开发环境工具,JBuilder 9是目前的较新的版本它比以前的版本更加简单和直观,方便上手在这个版本中Borland集成目前众多JAVA开发的优秀技术,如:工程管理、单元测试、代码审查、撰写Javadoc说明文档等等,极大的方便了Java开发人员的工作。如果用户既要求易于进行可视化布局,又要求有较大的灵活性,JBuilder就是最好的选择。 copyright paper51.com 3系统需求分析与总体设计 http://www.paper51.com
3.1 需求分析 内容来自论文无忧网 www.paper51.com 3.1.1 用户需求 内容来自www.paper51.com
软件要简单易上手,能够匿名或者使用帐号登录到用户指定的服务器上,进行访问和数据的上传下载。 copyright paper51.com 3.1.2 功能需求 http://www.paper51.com 该系统主要包括以下几个方面: 内容来自论文无忧网 www.paper51.com 1.可视化的交互界面模块;2.登录服务器模块;3.浏览服务器/本地目录和文件模块;4.上传/下载文件模块。由这四个模块构成该系统。 内容来自www.paper51.com 3.1.3 性能需求: http://www.paper51.com 整个系统操作应当简便,界面友好,运行稳定,执行速度快。系统本身运行对计算机硬件平台和操作系统平台要求适中。 内容来自www.paper51.com
3.2 设计思路 paper51.com 上传下载程序主要完成文件的传输,是系统的核心模块。Jbuilder9提供的FTP控件已经对其进行了类封装,因而对用户而言它是透明的,不必再去编程解释响应消息等,这就是控件的好处。这样使用JBuilder9,就节约了大量的开发时间。即使对FTP不是很了解,都可以很快建立起一个FTP客户端程序来。由于本程序只是FTP客户端,下面将分别对整个系统的图形界面、登录模块、远程浏览模块、本地浏览模块、上传模块和下载模块六大模块的程序实现细节进行详细介绍。 http://www.paper51.com 图5 系统模块图 paper51.com
3.3实现思路 内容来自论文无忧网 www.paper51.com 在Jbuilder9环境所提供的扩展包中,已经提供了一些网络类的类库——sun.net.ftp.FtpClient.,该类库主要用于建立FTP连接的类。利用此类的方法,我们可以远程登录到FTP服务器,列出该服务器上的目录,设置传输协议,以及传送文件。FtpClient类涵盖了几乎所有FTP的功能,FtpClient的实例变量保存了有关建立"代理"的各种信息。当然,还有很多此类开源的库,可以实现FTP的功能。这里我采用了FtpClient作为此次毕业设计的资源。以下是部分FtpClient的常用核心函数说明: 内容来自论文无忧网 www.paper51.com FtpClient有三种不同形式的构造函数,此构造函数将创建一FtpClient类,但不建立FTP连接。如下: http://www.paper51.com 1. public FtpClient(String hostname,int port) copyright paper51.com 此构造函数利用给出的主机名和端口号建立一条FTP连接。 内容来自论文无忧网 www.paper51.com
2. public FtpClient(String hostname) 内容来自论文无忧网 www.paper51.com 此构造函数利用给出的主机名建立一条FTP连接,使用默认端口号。 copyright paper51.com 3. FtpClient() 内容来自论文无忧网 www.paper51.com 一旦建立了类FtpClient,FTP连接可以用openServer方法建立,这个类的方法来打开与FTP服务器的连接。类ftpClient提供了如下两个可用于打开与FTP服务器之间的连接的方法。 paper51.com 1. public void openServer(String hostname) paper51.com 此方法用于建立一条与指定主机上的FTP服务器的连接,使用默认端口号。 copyright paper51.com 2. public void openServer(String host,int port) 内容来自论文无忧网 www.paper51.com 此方法用于建立一条与指定主机、指定端口上的FTP服务器的连接。 内容来自论文无忧网 www.paper51.com 打开连接之后,接下来的工作是注册到FTP服务器。这时需要利用下面的方法。此方法利用参数username和password登录到FTP服务器。 paper51.com public voidlogin(String username,String password) 内容来自论文无忧网 www.paper51.com 下面是FtpClient类所提供的一些控制命令。 paper51.com public voidcd(String remoteDirectory) 内容来自论文无忧网 www.paper51.com
该命令用于把远程系统上的目录切换到remoteDirectory所指定的目录。 内容来自论文无忧网 www.paper51.com public voidcdUp(): 内容来自论文无忧网 www.paper51.com 该命令用于把远程系统上的目录切换到上一级目录。 内容来自论文无忧网 www.paper51.com public Stringpwd(): copyright paper51.com
该命令可显示远程系统上的目录状态。 内容来自论文无忧网 www.paper51.com public voidbinary(): http://www.paper51.com 该命令可把传输格式设置为二进制格式。 内容来自www.paper51.com
此外,类FtpClient还提供了可用于传递并检索目录清单和文件的若干方法。这些方法返回的是可供读或写的输入、输出流。下面是其中一些主要的方法。 内容来自www.paper51.com publicTelnetInputStream list() http://www.paper51.com 返回与远程机器上当前目录相对应的输入流。 copyright paper51.com
public TelnetInputStreamget(String filename) paper51.com 获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。 内容来自www.paper51.com
publicTelnetOutputStream put(String filename) 内容来自论文无忧网 www.paper51.com 以写方式打开一输出流,通过这一输出流把文件filename传送到远程计算机。 内容来自www.paper51.com |