宋新艳
摘要:在Internet传输文件的FTP协议及软件实现,其功能多,实现技术复杂,许多功能用户很少使用。该文介绍了在win7环境下应用Java语言开发的FTP客户端软件。软件在Internet/LAN的环境下实现了客户机和服务器之间文件传输和操作等功能。软件实现FTP协议的基本和常用功能并采用可视化界面,用户使用简单方便。
关键词:FTP;文件传输;上传;下载
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2015)09-0110-02
Abstract:FTP protocol and software, used to transmit files, is a complex technique and its many functions have not been developed in Internet. This paper introduced the software of FTP client, which is developed in the environment of win7 and JAVA. The software is carrying out file transmission and file operation between Client and Server in Internet/LAN. Integrated functions of the softwarewere the following:file uploading, file downloading, file browsing at client, file browsing at server and information feedback. The software has visual interfaces and the basic and common functions of FTP protocol.It is easy to use.
Key words:FTP; file transmission; upload, download
文件传输协议(FTP)是使用最为普遍的网络协议之一,由最早的简单文件传输协议(TFTP)发展而来,经过不断的修正与完善,已成为网络间文件传输的重要协议。FTP在Internet上用于控制文件的双向传输,可以在网络中传输电子文档、图片、声音、影视及程序等多种类型的文件。市面上FTP软件一般功能多,实现技术复杂,许多功能用户很少使用。为了适应公司员工上传和下载文件需要,在 win7环境下应JAVA开发了一套FTP客户端软件。该软件在Inter-net/LAN的环境中能实现客户机与服务器之间文件的传输和操作的基本功能。
1 FTP相关技术
1.1 FTP工作原理
FTP是网络上的应用层协议,使用TCP协议传输。FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道。控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的。数据通道是和FTP服务器进行文件传输或者列表的通道。
1.2 FTP的工作方式
FTP的工作方式有PORT模式和PASV模式两种。
PORT模式:是主动模式,在主动传输模式下,由服务器向客户端发起一个用于数据传输的连接。客户端的连接端口由服务器端和客户端通过协商确定。主动传输模式下,FTP服务器使用20端口与客户端的端口进行连接,并传输数据,客户端只是处于接收状态。
PASV模式:是被动模式。在被动传输模式下,FTP服务器等待客户与其联系。由客户端向服务器发起一个用于数据传输的连接。被动传输模式下,FTP服务器打开一个暂态端口等待客户端对其进行连接,并传输数据,服务器并不参与数据的主动传输,只是被动接受。
2 系统设计
2.1总体设计
1)基本功能:界面设计;本机文件资源浏览;远程文件资源浏览;与服务器连接时的信息反馈。
2)文件传输功能:文件的上传和下载。
3)扩展功能:传输进度显示;文件浏览、文件删除功能。
2. 2 系统功能设计
文件传输模块是整个系统的核心。此模块实现FTP客户端与服务器之间的文件传送。文件的传输包括上传和下载两个功能。
本机文件浏览模块的功能是对本机上的文件进行浏览。
远程浏览模块的功能是对服务器上的文件进行浏览。
文件操作模块主要实现文件删除、打开等功能。
传输进度、信息显示模块显示客户端与服务器之间进行信息交过程的实时情况(连接成功与否、上传和下载的进度等)。
3 系统实现
3.1登录模块
客户端中使用connectServe方法来实现连接服务器功能,首先是使用FtpClient类的openServer(string server)方法打开远程FTP服务器,然后使用FtpClient类的login(user, password)方法登录服务器。登录远程FTP服务器有两种方式,一种是注册用户登录,另一种是以匿名方式登录。为了安全,本系统使用第一种方式登录,所以需要拥有该服务器的注册用户名和密码。
为了建立一条与指定主机、指定端口上的FTP服务器的连接,首先定义4个变量,命名为ip(服务器IP地址),username(用户名),port(端口号),password(密码),分别用来接收来自数据输入界面的数据。连接服务器的命令函数:openServer(String host,String username, int port, String password )。然后将接收到的数据发送至服务器验证,验证成功则使用append()方法在信息显示界面中提示连接成功,失败则显示无法连接,并给出错误提示。
3.2 本地文件浏览模块
功能是显示本机的文件目录。首先用类DefaultTableModel创建一个表格模型,DefaultTableModel是 TableModel 的一个实现,它使用一个 Vector 来存储单元格的值。表格包括三个数据项:文件名,文件大小,修改日期。通过使用一个二维数组Object[][]来存储这三个数据。通过方法getCurrentDirectory()获得当前目录,再利用listFile()获取该目录下的文件,经解析后存入二维数组中。
3.3 远程文件浏览模块
具体功能是显示服务器端的文件目录。当连接服务器,登入成功之后,可以使用FtpClient控件的List()方法来获取FTP服务器上目录与文件的详细内容,包括创建文件日期,文件大小,目录与文件的名称等相关信息。在得到文件名后,调用其方法getSystemIcon()就可以获得相应的文件图标。由于List()方法执行后的结果是TelnetInputStream数据流,本系统通过getFileAll()方法进行解析后把它显示在表格中。
3.4 上传模块和下载模块
1)文件下载模块
文件的下载,使用TelnetInputStream流,并使用FTPClient控件的get()方法将流的源头绑定,然后再在本地用将要下载的文件或者目录名来新建一个文件或者目录,并绑定到FileOutputStream流中,执行TelnetInputStream流的读并写入FileOutputStream流中,就可以完成下载功能。文件下载流程图如图1所示。在下载之前程序首先需要判断浏览框中选中的是目录还是文件。若选中的是文件,则直接调用方法:void downloadFile(String filename, String newfilename);
若选中的是目录需要使用递归的方法下载目录中的文件或者是子目录。它调用了三个方法,依次为:void downloadDir(String filename);
void downloadFile_x(String pathname,String filename);
void downloadFile(Stringfilename, String newfilename);
2)文件上传程序
文件的上传和文件的下载基本类似,不过使用的是TelnetOutputStream流,并使用FtpClient控件的put方法和流绑定,然后在远程目录上新建要上传的文件或者目录,将本地文件绑定到FileInputStream流中,执行FileInputStream流的读入并写入TelnetOutputStream流中即可完成上传功能,对于目录的上传同样需要递归方法来实现。
3.5 传输进度、信息显示模块
1)传输进度
该模块帮助用户了解文件传输的状态,使用Timer组件来实现。
Timer函数的构造如下:Timer(int delay,ActionListener);
利用Timer组件根据所给予的dalay时间内周期性地触发ActionEvent事件,调用ActionListener接口所定义的actionPerformed()方法,通过计算已传输的内容和要传输的文件的大小,实现传输进度的显示。start()方法和stop()方法分别用于Timer组件的激活和停止。
2)信息显示模块
使用JTextArea类可以创建显示多行文本的对象,通过方法append()来显示客户端与服务器的交互信息,如显示登入成功与否,显示来自服务器端的友好信息,以及文件上传和下载成功与否。
4 结束语
该软件能够以帐户和密码远程登入FTP服务器,完成文件的上传与下载并保证文件的完好。软件体积小巧、直观,利用图形界面操作简单易懂。
参考文献:
[1] Douglas E Comer. 用TCP/IP进行网际互联(第一、二、三卷)[M]. 林遥, 译. 北京: 机械工业出版社, 2004.
[2] 张峰. Java程序设计与项目实战(全程实录)[M]. 北京: 清华大学出版社, 2011.
[3] 董迎红, 王薇. Java程序设计案例教程与实训[M]. 北京: 北京大学出版社, 2011.
[4] 刘德春. FTP上传控件的实现[J]. 电脑编程技巧与维护, 2011, 19(20): 104-108.