课程设计(论文)说明书
题 目: FTP下载客户端软件设计 院 (系): 信息与通信学院 专 业: 通信工程 学生姓名: 黄思达 学 号: 0700210514 指导教师: 李天松 职 称: 副教授
2010年12月20日
第 1 页 共2 页
摘 要
摘 要: FTP是Internet上用来传送文件的协议它是为了我们能够在Internet上互相传送文件而制定的文件传送标准,规定了Internet上文件如何传送。通过FTP协议,我们就可以跟Internet上的FTP服务器进行文件的上传或下载。本文以实现一个简单易用的FTP 客户端为目标,通过分析FTP协议的基本工作原理和FTP 的数据传输原理,研究如何使用Java 工具对FTP 客户端进行设计,选择Java类库中的 ftpclient 类来实现FTP 客户端程序的上传下载等主要功能,并用myeclipse8.6软件提供的一个支持可视化编程的开发环境,从而实现了对FTP 客户端的开发。
关键词:FTP 协议、工作原理、ftpclient、上传下载
Abstract
FTP protocol is used to transfer files on the Internet .It is for us to transmission of
documents and the development of file with each other on the Internet,the provisions of the Internet on how to send documents.Through the FTP protocol, we can link the FTP server of the Internet to upload or download files.In this paper, in order to achieve an easy-to-use FTP client as the goal , FTP protocol by analyzing the basic working principle and the principle of FTP data transfer to study how to use the Java tool for FTP client to design.Choose the ftpclient of Java class library for FTP client program to achieve the main functions such as uploading and downloading , and Jbuilder2006 support software provides a visual
programming development environment , in order to achieve the FTP client development.
Keywords: FTP protocol、work mode、client、upload and download
第 2 页 共2 页
目 录
引言 ....................................................................................................................... 1 一. FTP 工作原理 ............................................................................................. 2 二. FTP工作模式 .............................................................................................. 2 三. FTP传输模式 .............................................................................................. 2
3.1 二进制传输方式 ................................................................................................................. 2 3.2 ASCII传输方式 ................................................................................................................. 3
四. FTP客户端总体设计 ................................................................................................... 3
4.1 设计工具 ............................................................................................................................. 3 4.2 Ftpclient类 ........................................................................................................................... 3
五. 客户端主要模块设计 ................................................................................................. 4
5.1 客户端功能模块 ................................................................................................................. 4 5.2 客户端界面设计 ................................................................................................................. 4 5.3 部分代码设计 ..................................................................................................................... 5
六. 程序结果 ........................................................................................................................ 6 七.总结 ............................................................................................................... 7 参考文献: .............................................................................................................. 8 附录: ................................................................................................................... 9
第 1 页 共 15 页
引言
目前,FTP 服务在网络上已经是一种广泛使用的服务了,它是建立在 FTP 协议上的用于网络环境下进行文件传输的一种文件传输系统,几乎可以传输各种类型的文件,如文本文件、声音文件、图像文件等,这个文件传输系统由服务器端程序和客户端程序共同组成,客户端程序提供用户操作的界面并完成文件的上传和下载。在众多的网络应用中,FTP 有着非常重要的地位,在 Internet 中一个十分重要的就是资源,而各种各样的资源大多数都是放在 FTP 服务器中的,为了获得这些资源,我们必须使用FTP 客户端软件。如今网络上有许多 FTP 客户端类的软件,但是由于其界面复杂,操作繁琐,不被大多数用户接受,为了更好的利用网络资源,方便用户使用 FTP,我设计了一种简便易用的 FTP 客户端。
本文首先分析了 FTP 协议,FTP 的工作原理等,然后介绍了如何使用 Java 工具来设计和实现一个简单的 FTP 客户端。使用本 FTP 客户端,可以使用户轻松的下载、上传网络资源。
第 2 页 共 15 页
一、 FTP 工作原理:
FTP(File Transfer Protocol),是文件传输协议的简称。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序。用户可以通过它把自己机器与世界各地所有运行FTP协议的服务器相连,访问服务器上的资源和信息。
二、 FTP工作模式
图1 FTP工作模式
由上图可以简单明了的发现用户与服务器的数据连接是双工传输的。
三、 FTP 传输模式
FTP 协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp 协议对话,并且能访问Internet,你可以用ftp 命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。
FTP的传输有两种方式:二进制数据传输模式和ASCII传输模式。 3.1 二进制传输方式
在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,Macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢,也会损坏数据,使文件变得不能用。如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。
第 3 页 共 15 页
3.2 ASCII传输方式
假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理。
四、 FTP客户端总体设计
本章主要阐述了FTP客户端的设计目的和设计用到的工具选择,以及客户端的主要功能模块的设计,客户端的界面设计,三个主要功能模块的数据流程图。 4.1 设计工具
程序设计中用到的主要工具就是Java,Java是SUN公司开发的一种面向对象的新一代网络编程语言,它可以在各种不同的机器、操作系统的网络环境中进行开发,具有解释型语言(如Basic语言)和编译型语言(如C语言)的特性。Java摒弃了C++中各种弊大于利的功能和许多很少用到的功能,用Java开发的程序可以在网络上传输,并运行于任何客户机上。使用Java语言可以方便的设计出网络应用类的程序,而且Java的移植性很好,在、其应用程序在各种机器上都能无差别的执行为了使FTP客户端能适应大多数平台下的使用,我选择使用Java语言来实现。 4.2 ftpclient 类
Java 类库的存在使它适合于一个不断发展的环境。在类库中我们可以自由地加入新的方法和实例变量而不会影响用户程序的执行。并且Java 通过接口来支持多重继承,使其比严格的类继承具有更灵活的方式和扩展性。在处理复杂事物的时候,用到的一种基本手段就是抽象。抽象的目的就是区别事物之间的本质和不同,面向对象编程(OOP)的实质就是利用类和对象来建立抽象模型。类表示了对象的类别,是创建对象的蓝本。建立一个事物的抽象模型,本质上就是表达该事物的性质和行为。使用类来建立抽象模型,是通过在类中定义变量和方法来实现的。类中定义的属性是一种可存储值的变量,该变量代表着事物的具体性质。在J2SE 中提供了与客户端编程有关的Api,它就是sun.net.ftp.FtpClient类,FtpClient 类封装了FTP 协议的相关指令与实现细节,提供了一系列的方法,这些方法涵盖了几乎所有 ftp 的功能使用FtpClient 类设计FTP 客户端程序可以让编程人员轻松地实现登录远程 FTP 服务器、浏览服务器上的目录、设置传输协议、上传文件和下载文件等功能。
本文所使用的FtpClient 类的构造方法和主要方法如下: 1) Public FtpClient(String hostname)
此构造函数利用给出的主机名建立一条FTP 连接,使用默认端口号。 2) Public void openServer(String hostname)
第 4 页 共 15 页
这个方法用于建立一条与指定主机上的FTP 服务器的连接,使用默认端口号。 3) Public void login(String username,String password)
此方法利用参数 username 和 password 登录到 FTP 服务器。使用过 Intemet 的用户应该知道,匿名 FTP 服务器的登录用户名为 anonymous,密码一般用自己的电子邮件地址。
4) Public void binary()
该命令可把传输格式设置为二进制格式。
五、 客户端主要模块设计
这个部分是本文设计的中心部分,是对客户端进行主要的功能设计和界面设计。 5.1 客户端功能模块
FTP 客户端作为用户连接FTP 服务器的工具,需要具备一些基本功能模块,如连接、上传、下载等,其中最主要的三大功能模块如下:
a) 下载功能模块:连接用户指定的FTP 服务器,获取服务器目录下的文件列表,当用户选择项目为文件时,点击下载可以下载用户所需要的文件。选定文件后提示用户将文件存储在何处,用户选择存储区后开始下载任务。依靠FTP 协议的支持,用户下载的文件没有类型和大小限制,即用户可已选择任何自己想要下载的文件,通过FTP 客户端进行下载。
b) 上传功能模块:用户可以自行选择本机上存储的文件,上传至FTP 服务器。在用户选择存储在服务器的位置后,点击上传,选择所需要上传的文件,即可将文件上传至服务器。
c) 连接功能模块:将用户本机与指定的IP 地址连接,验证用户命和密码,在FTP 服务器上进行注册。
有了这三个基本的功能模块,客户端的基本应用功能即可实现。 5.2 客户端界面设计
为了使用户能够方便的使用FTP 客户端,在设计中我将数据输入和信息显示整合在一个页面中,全部客户端仅包含一个主要的窗口,窗口中分别有以下五个界面: a) 数据输入界面:用来让用户输入服务器地址,用户名,密码。
b) 服务器文件信息显示界面:主要用来显示服务器下存储的文件,方便用户清 楚的了解服务器中存储了哪些文件。
c) 操作按钮界面:用户可以通过点击上传、下载、连接、断开等按钮来实现客 户端的具体操作。
d) 信息显示:显示当前连接信息和上传下载是否成功信息。
这五个界面可以使用 myeclipse 8.6 工具下的 swing 控件来实现,在布局时,将界面内的各个元素整合在一个框架中。
第 5 页 共 15 页
图2 客户端界面设计
5.3部分代码设计 1. 按钮的代码
jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton();
然后再分别对各种进行改名“连接”、“断开”。 public void mousePressed(java.awt.event.MouseEvent evt) { jButton1MousePressed(evt); } });
jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt);
以上代码是对jButton1的启用设置,意思是在鼠标按这个按键的时候让该按键启用。其他按键启用方法同上。 2. 服务器和用户名的代码
jTextField1 = new javax.swing.JTextField(); jTextField2 = new javax.swing.JTextField(); jTextField3 = new javax.swing.JTextField(); jTextField4 = new javax.swing.JTextField();
第 6 页 共 15 页
再对文本框内输入相应的FTP地址202.193.72.102和默认的用户名Username。 3. 密码栏的设计代码
jPasswordField1 = new javax.swing.JPasswordField(); 4. 本地文件栏与服务器远程文件栏设计代码 DefaultListModel modelList = new DefaultListModel(); private JList localList = new JList(); private JList distanceList = new JList();
JScrollPane localScrollPane = new JScrollPane(localList); JScrollPane distanceScrollPane = new JScrollPane(distanceList); private JTree localTree; private JTree ServerTree; 主要运用的是java中的树结构。
六、 程序结果
图3 登陆服务器界面 1
测试中,登陆的是学校ftp:202.193.72.102。.属于匿名登陆上去的。 如若没有输入服务器地址,会出现如下提示。
第 7 页 共 15 页
图4 登陆服务器界面 2
如上图显示,在没有输入用户名和密码的时候会有相应的提示。
七、 总结
通过此次FTP客户端的设计,让我对ftp的链接方式有了更进一步的了解。同时在我选择使用当下比较流行的java语言做设计的时候也是一种新的挑战。因为java在一些图形处理方面有比较好的优势,就swing插件而言,美观而简洁。同时java也有很好的移植性。通过平时对一下java语言程序的了解和认知,再通过书籍与网络的资料查阅,让我在使用myeclipse8.6的开发软件对此次课设题进行设计,测试。虽然在测试中不是每个所预期设想的程序都能实现,但是也能够实现了基本功能。
第 8 页 共 15 页
参考文献:
[ 1] 李钟尉,周小彤,陈丹丹. Java 从入门到精通(第二版) [M]. 清华大学出版社,2010 [ 2] 杨宗志. JBuilder程序设计实例[M].清华大学出版社,2002 [ 3] 王鹏.Java Swing图形界面开发与案例详解.清华大学出版社,2008
第 9 页 共 15 页
附录:
package test;
import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.List;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*;
import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.DefaultListModel; import javax.swing.JTree; import sun.net.TelnetInputStream; import sun.net.ftp.FtpClient; import sun.net.ftp.FtpLoginException; public class Test extends JFrame
implements ActionListener { FtpClient ftp = null; private List list = new List();
private JPanel FtpClientFrame = new JPanel(new BorderLayout());
private JPanel FtpClientFrameOne = new JPanel(new FlowLayout(FlowLayout. LEFT));
private JPanel FtpClientFrameTwo = new JPanel(new GridLayout(1, 8)); private JPanel FtpClientFrameThree = new JPanel(new GridLayout(2, 1));
第 10 页 共 15 页
private JPanel FtpClientFrameFour = new JPanel(new GridLayout(1, 2)); //连接、断开按钮
private JButton linkButton = new JButton(\"连接\"); private JButton breakButton = new JButton(\"断开\"); //连接状态
private JLabel statusLabel = new JLabel(); //用户登录
private JLabel urlLabel = new JLabel(\"FTP服务器地址:\"); private JLabel usernameLabel = new JLabel(\"用户名:\"); private JLabel passwordLabel = new JLabel(\"密码:\"); private JLabel portLabel = new JLabel(\"端口:\"); private JTextField urlTextField = new JTextField(10); private JTextField usernameTextField = new JTextField(10); private JTextField passwordTextField = new JTextField(10); private JTextField portTextField = new JTextField(10); DefaultListModel modelList = new DefaultListModel(); private JList localList = new JList(); private JList distanceList = new JList();
JScrollPane localScrollPane = new JScrollPane(localList); JScrollPane distanceScrollPane = new JScrollPane(distanceList); private JTree localTree; private JTree ServerTree; public Test() {
FtpClientFrameOne.add(linkButton); FtpClientFrameOne.add(breakButton); FtpClientFrameOne.add(statusLabel); FtpClientFrameTwo.add(urlLabel); FtpClientFrameTwo.add(urlTextField); FtpClientFrameTwo.add(usernameLabel); FtpClientFrameTwo.add(usernameTextField); FtpClientFrameTwo.add(passwordLabel); FtpClientFrameTwo.add(passwordTextField); FtpClientFrameTwo.add(portLabel); FtpClientFrameTwo.add(portTextField); FtpClientFrameThree.add(FtpClientFrameOne);
第 11 页 共 15 页
FtpClientFrameThree.add(FtpClientFrameTwo); FtpClientFrameFour.add(localScrollPane); FtpClientFrameFour.add(list);
FtpClientFrame.add(FtpClientFrameThree, \"North\"); FtpClientFrame.add(FtpClientFrameFour, \"Center\"); setContentPane(FtpClientFrame); setTitle(\"0700210514FTP客户端\"); setSize(800, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true);
linkButton.addActionListener(this); breakButton.addActionListener(this); }
public String getDir(String path) { String dirName; int ch; int begin = 55;
dirName = path.substring(begin).trim(); return dirName; }
public void loadList() {
StringBuffer buf = new StringBuffer(); int ch;
list.removeAll(); try {
TelnetInputStream t = ftp.list(); t.setStickyCRLF(true); while ( (ch = t.read()) >= 0) { if (ch == '\\n') {
list.add(getDir(buf.toString())); buf.setLength(0); } else {
buf.append( (char) ch); }
第 12 页 共 15 页
} }
catch (IOException e) { e.printStackTrace(); }
list.validate(); }
public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if (source == linkButton) { //连接Ftp服务器 try { if (ftp != null) ftp.closeServer();
statusLabel.setText(\"连接中,请等待.....\"); ftp = new FtpClient(urlTextField.getText()); ftp.login(usernameTextField.getText(), passwordTextField.getText()); ftp.binary(); }
catch (FtpLoginException e) {
JOptionPane.showMessageDialog(null, \"Login Failure!!!\"); e.printStackTrace(); }
catch (IOException e) {
JOptionPane.showMessageDialog(null,
urlTextField.getText() + \"Connection Failure!!!\"); e.printStackTrace(); }
catch (SecurityException e) {
JOptionPane.showMessageDialog(null, \"No Purview!!!\"); e.printStackTrace(); }
if (urlTextField.getText().equals(\"\"))
JOptionPane.showMessageDialog(null, \"Ftp服务器地址不能空!!!\");
第 13 页 共 15 页
else if (usernameTextField.getText().equals(\"\"))
JOptionPane.showMessageDialog(null, \"用户名不能为空!!!\"); else if (passwordTextField.getText().equals(\"\"))
JOptionPane.showMessageDialog(null, \"密码不能为空!!!\"); else
statusLabel.setText(\"已连接到Ftp:\" + urlTextField.getText()); loadList(); }
if (source == breakButton) { System.exit(0); } }
public static void main(String[] args) { // TODO Auto-generated method stub Test ftpClientFrame = new Test(); }
public void setLocalTree(JTree localTree) { }
public JTree getLocalTree() { }
public void setServerTree(JTree serverTree) { }
public JTree getServerTree() { } }
return ServerTree; ServerTree = serverTree; return localTree; this.localTree = localTree;
因篇幅问题不能全部显示,请点此查看更多更全内容