使用java开发ftp.pdf
《使用java开发ftp.pdf》由会员分享,可在线阅读,更多相关《使用java开发ftp.pdf(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一、概述大家知道,文件传输系统是由服务器端服务程序和客户端应用程序两部分组成。一个FTP 服务器进程可同时处理多个客户进程的请求服务。FTP 服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从进程,负责处理单一请求。象我们在windows 2000/2003 Server 中 IIS 所提供的FTP 服务器程序就是服务器端服务程序的典型代表。我们这里所说设计的一个实现上传和下载文件功能程序主要是指ftp 客户端应用程序。FTP 客户端设计的原理,FTP 使用两条 TCP 连接来完成文件传输:控制连接与数据连接。控制连接用于传输控制,数据连接用于数据输送。在服务器启动后,服务
2、器就会在端口21 等待客户的连接请求,有用户需要传输文件时,客户与服务器的端口21 建立一个控制连接,用来传送客户的命令和服务器的应答,该连接一直保持到客户与服务器通信结束为止。当客户发出数据传输命令时,服务器会主动与客户建立数据连接,并与其进行数据交换。客户端用户并不直接处理控制连接上的FTP 命令和 FTP 响应,而是由两个协议解释器进行处理。用户接口为客户端用户提供一定形式的输入界面,接收用户的命令,将其转换成标准的 FTP 命令,最终将控制连接上的FTP 响应转换成用户可理解的方式。在客户与服务器的整个连接期间,控制连接必须保持,而数据连接却可以根据请求动态地建立和关闭。在最常用的流模
3、式中,文件结束是用数据连接的关闭来表示的,换句话说,每传输一个文件或文件列表,系统就会再建立一个新的数据连接。二、Jbuilder9中 FTP 库简介在 Jbuilder9使用的 java 语言中,提供了一类网络类库.ftp.FtpClient.,该类库主要提供了用于建立FTP 连接的类。利用这些类的方法,编程人员可以远程登录到FTP 服务器,列举该服务器上的目录,设置传输协议,以及传送文件。FtpClient类涵盖了几乎所有 FTP 的功能,FtpClient的实例变量保存了有关建立代理 的各种信息。下面给出了这些实例变量。public static boolean useFtpProxy
4、这个变量用于表明FTP 传输过程中是否使用了一个代理,因此,它实际上是一个标记,此标记若为TRUE,表明使用了一个代理主机。public static String ftpProxyHost 此变量只有在变量useFtpProxy为 TRUE 时才有效,用于保存代理主机名。public static int ftpProxyPort 此变量只有在变量useFtpProxy为 TRUE 时才有效,用于保存代理主机的端口地址。FtpClient有三种不同形式的构造函数,如下所示:1、public FtpClient(String hostname,int port)此构造函数利用给出的主机名和端口
5、号建立一条FTP 连接。2、public FtpClient(String hostname)此构造函数利用给出的主机名建立一条FTP 连接,使用默认端口号。3、FtpClient()此构造函数将创建一FtpClient类,但不建立FTP连接。这时,FTP连接可以用openServer方法建立。一旦建立了类FtpClient,就可以用这个类的方法来打开与FTP 服务器的连接。类ftpClient提供了如下两个可用于打开与FTP 服务器之间的连接的方法。public void openServer(String hostname)这个方法用于建立一条与指定主机上的FTP 服务器的连接,使用默认端
6、口号。public void openServer(String host,int port)这个方法用于建立一条与指定主机、指定端口上的FTP 服务器的连接。打开连接之后,接下来的工作是注册到FTP 服务器。这时需要利用下面的方法。public void login(String username,String password)此方法利用参数username和 password登录到 FTP 服务器。使用过 Intemet 的用户应该知道,匿名FTP 服务器的登录用户名为anonymous,密码一般用自己的电子邮件地址。下面是 FtpClient类所提供的一些控制命令。public voi
7、d cd(String remoteDirectory)该命令用于把远程系统上的目录切换到参数remoteDirectory所指定的目录。public void cdUp():该命令用于把远程系统上的目录切换到上一级目录。public String pwd():该命令可显示远程系统上的目录状态。public void binary():该命令可把传输格式设置为二进制格式。public void ascii():该命令可把传输协议设置为ASCII 码格式。public void rename(String string,String string1)该命令可对远程系统上的目录或者文件进行重命名操
8、作。除了上述方法外,类 FtpClient 还提供了可用于传递并检索目录清单和文件的若干方法。这些方法返回的是可供读或写的输入、输出流。下面是其中一些主要的方法。public TelnetInputStream list()返回与远程机器上当前目录相对应的输入流。public TelnetInputStream get(String filename)获取远程机器上的文件filename,借助 TelnetInputStream把该文件传送到本地。public TelnetOutputStream put(String filename)以写方式打开一输出流,通过这一输出流把文件filenam
9、e传送到远程计算机。三、设计一个FTP 的客户端程序,实现文件上传下载功能FTP 的客户端程序设计主要有四个部分:客户登录程序设计、FTP 服务器目录浏览程序设计、FTP 服务器目录更新程序设计、上传和下载文件程序设计。而相应的操作流程为:首先客户端程序先连接服务器,然后浏览或更新FTP 服务器目录,选择文件进行下载或上传,进行文件数据传输,最后断开连接。我们要注意,在下载文件和上传文件时,其数据流向是不同的;而连接的断开也是由服务器程序执行的。FTP客户端系统的系统结构(也包含在服务器端的部分处理过程),整个系统由图形界面、登录程序、浏览程序、上传下载程序四大模块组成。图形界面又由登录界面和
10、文件处理界面组成,它主要给用户提供所见即所得的交互手段。登录程序通过用户提供的登录信息(包括 FTP 服务器 IP,服务器应用程序端口号、用户名(ID)和密码)连接到服务器,并把信息反馈于登录界面。浏览程序实现服务器和客户端文件目录的浏览。上传下载程序主要完成文件的传输,是系统的核心模块。Jbuilder9提供的 FTP 控件已经对其进行了类封装,因而对用户而言它是透明的,不必再去编程解释响应消息等,这就是控件的好处。这样使用JBuilder9,就节约了大量的开发时间。即使对FTP 不是很了解,都可以很快建立起一个FTP 客户端程序来。由于本程序只是FTP 客户端,下面将分别对整个系统的图形界
11、面、登录程序、浏览程序和上传下载程序四大模块的程序实现细节进行详细介绍。1、系统的图形界面设计系统的图形界面设计是关于连接FTP 服务器界面和文件处理界面这二个界面的设计,它主要是为用户提供所见即所得的交互接口。主界面的设计用户可以使用JBuilder 9的 Project Wizard来创建工程。工程文件扩展名为.jpx。工程文件包含了工程中其他文件所在目录信息。使用Project Wizard的具体步骤如下:选择File-New Proiect 菜单项;在Name 文本框中输入FTPClient;单击 Finish 按钮。然后使用 ApplicationWizard向导创建应用程序,均选择
12、默认值。如图1 所示:图 1 连接 FTP 服务器界面的设计连接 FTP 服务器界面的设计是在jPanel1 的基础止设计实现的,增加了一些其他控件。如图 2 所示:图 2 文件处理界面的设计文件处理界面的设计是在jPanel2 的基础上实现的,增加了一些其他控件。如图 3 所示:图 3 界面设计的程序实现Java 是一个面向对象的程序语言,它使用了很多对象,在 JBuilder9 中使用的是JDK1.4库,它提供了很多的界面对象。在本实例中,使用如下的对象和库。package ftpclient;/库声明import java.awt.*;import java.awt.event.*;im
13、port javax.swing.*;import com.borland.jbcl.layout.*;import java.beans.*;import java.io.*;import .TelnetInputStream;import .ftp.*;import java.lang.Object;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;import javax.swing.JTextField;import javax.swing.JCheckBox;
14、import javax.swing.tree.TreePath;import .TelnetOutputStream;import java.util.Properties;/*pTitle:this is study/p*pDescription:/p*pCopyright:Copyright(c)2004/p*ghq*version 1.0*/public class Frame1 extends JFrame /对象说明private JPanel contentPane;private JTextField jTextField1=new JTextField();private J
15、TextField jTextField2=new JTextField();private JTextField jTextField3=new JTextField();private JCheckBox jCheckbox1=new JCheckBox();FtpClient ftp=null;JTabbedPane jTabbedPane1=new JTabbedPane();JPanel jPanel1=new JPanel();JPanel jPanel2=new JPanel();PaneLayout paneLayout1=new PaneLayout();XYLayout x
16、YLayout1=new XYLayout();JLabel jLabel1=new JLabel();JLabel jLabel2=new JLabel();JLabel jLabel3=new JLabel();JTextField jTextField4=new JTextField();JLabel jLabel4=new JLabel();BorderLayout borderLayout1=new BorderLayout();Box box1;JPanel jPanel3=new JPanel();JPanel jPanel4=new JPanel();XYLayout xYLa
17、yout2=new XYLayout();BorderLayout borderLayout2=new BorderLayout();JScrollPane jScrollPane1=new JScrollPane();JButton jButton3=new JButton();JButton jButton4=new JButton();JScrollPane jScrollPane2=new JScrollPane();/定义树节点,模型和树视图DefaultMutableTreeNode root1=new DefaultMutableTreeNode(目录中没有文件);Default
18、TreeModel model1=new DefaultTreeModel(root1);JTree jTree1=new JTree(model1);JButton jButton5=new JButton();JLabel statusLabel=new JLabel();List list1=new List();JScrollPane jScrollPane3=new JScrollPane();JTextArea jTextArea1=new JTextArea();JButton jButton1=new JButton();JButton jButton2=new JButton
19、();JLabel jLabel5=new JLabel();JLabel jLabel6=new JLabel();2、登录程序下面我们来说明一下利用FtpClient 控件实现 FTP 客户端应用程序的登录功能。要登录FTP 服务器,一定要设置下面的参数:hostname:服务器的IP 地址或主机名称,为字符串类型;port:服务器的通信端口,为int 类型(一般而言,FTP 的通信端口默认为21);username:用户的登录账号;password:用户的登录密码。一般的使用办法是,直接使用构造方法创建一个FtpClient 类对象(如果在构造FtpClient类对象时没有设置参数,则可
20、以使用openServer方法来打开服务器端口),然后使用login方法来登录,并进行用户认证。以下给出示例程序的源代码:/登录程序:void jButton1_actionPerformed(ActionEvent e)/作用:登录连接到FTP 服务器。void jButton1_actionPerformed(ActionEvent e)int ch;String hostname=jT extField1.getText();/如果已经打开了FTP 服务器,则先关闭FTP 文件服务器try if(ftp!=null)ftp.closeServer();catch(IOException
21、ex)ex.printStackTrace();/连接到服务器try statusLabel.setText(正在连接,请等待.);ftp=new FtpClient(hostname);/登录 Ftp 服务器ftp.login(jT extField2.getText(),jTextField3.getText();/使用二进制协议ftp.binary();catch(FtpLoginException ex)/没有主机的登录权限statusLabel.setText(无权限与主机:+hostname+连接!);catch(IOException ex)/连接主机失败statusLabel.
22、setText(连接主机:+hostname+失败!);catch(SecurityException ex)/用户或者密码可能不对statusLabel.setText(用户或者密码可能不对,无权限与主机:+hostname+连接!);/连接成功后的显示statusLabel.setText(连接主机:+hostname+成功!);/列表框需要重新刷新ReloadList();3、浏览程序我们利用FtpClient 控件可以实现FTP 客户端应用程序的浏览功能,浏览功能的实现程序由浏览服务器端文件和浏览本地文件两部分组成。浏览服务器端的程序当连接登录成功之后,可使用FtpClient控件的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 java 开发 ftp
限制150内