FTP客户端软件的设计与实现-毕业设计.doc_第1页
FTP客户端软件的设计与实现-毕业设计.doc_第2页
FTP客户端软件的设计与实现-毕业设计.doc_第3页
FTP客户端软件的设计与实现-毕业设计.doc_第4页
FTP客户端软件的设计与实现-毕业设计.doc_第5页
免费预览已结束,剩余33页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕 业 设 计FTP客户端软件的设计与实现摘 要当今网络技术迅猛发展,数据信息处理越来越复杂,人们对数据的处理不再局限于固定的单一地点,因此对同一个文件不同地点的使用就需要同步共享。文件传输协议正是为了满足以上要求,用于在网络间实现文件传输与共享网络协议。现在Internet的广泛应用在很大程度上也得益于建立在文件传输协议上文件传输系统的应用。本次设计采用流行的Java作为此次设计的开发语言,并采用C/S结构作为FTP的网络体系结构。论文首先介绍了文件传输协议的基本原理与概念,然后对Eclipse开发平台和Java语言做了简要说明,随后阐述了C/S的网络通信模式、TCP/IP协议及Socket网络编程原理;最后全面的介绍了FTP服务器端和客户端的设计、实现以及技术特点。关键词: 文件传输协议 TCP/IP Java Socket 目 录1 绪 论12 系统可行性分析设计13 相关技术介绍33.1 FTP协议介绍33.2 FTP工作原理33.3 FTP的传输模式33.4 ASCII传输方式43.4.1 二进制传输模式43.5 FTP的工作方式43.6 FTP命令与响应代码43.7 C/S架构简介63.8 JAVA简介73.8.1 FTP的一些特性73.8.2 重要历史事件73.8.3 FTP模型83.8.4 FTP协议的安全扩展93.9 Java Swing技术介绍114 需求分析134.1 任务概述134.1.1 目标134.1.2 用户特点134.2 需求规定144.2.1 对功能的规定144.2.2 对性能的规定144.2.3 流量图标和空间文件查看144.3 运行环境规定144.3.1 设备144.3.2 支持软件155 概要设计155.1 总体设计155.1.1 设计思路155.2 系统模块的实现155.2.1 界面模块实现155.2.2 浏览程序165.2.3 浏览服务器端目录程序165.2.4 文件下载和上传程序196.2 界面设计256.2.1 主窗体256.2.2 站点管理窗体266.2.3 传输状态窗体277 测试及分析287.1 测试287.1.1 申请免费空间账号287.1.2 登录FTP服务器287.1.3 客户端与服务器的连接297.1.4 主机文件目录307.1.5 服务器文件目录307.1.6 传输过程317.2 分析328.总结32参 考 文 献33致 谢35仲恺农业工程学院毕业论文(设计)成绩评定表361 绪 论如今网络技术快速发展,数据文件越来越大,同时人们对文件处理和同步的要求越来越高。通常我们可以用QQ、网络邮箱、FTP客户端等软件来实现文件的共享、传输和同步。但这些软件都有各自的缺点,如QQ文件传输必须要求两个用户同时在线,网络邮箱必须以邮件的形式上传至邮箱。由于QQ、邮箱等软件都需要满足特定的要求才能实现文件共享,而且共享往往只是单个文件,并不能以文件目录系统的形式呈现给用户,因此FTP软件始终在文件共享领域占有一席之地。根据有关方面统计全世界现有100000多个FTP文件服务器对所有Internet用户开使用。FTP从早期使用操作系统的文字模式发展为图形用户接口的应用,如WS_FTP,以及浏览器形成的超链接下载方式.虽然用户接口不断改进,但都是以FTP为其基础核心。基本上,FTP是另一种C/S(客户/服务器体系结构),与Socket网络程序的应用最大差别在于FTP定义了服务器与开发客户端的行为模式及相关的指令、响应及传输的数据类型。在下面的各章中我们将根据RFC959的定义以及实际需求,设计实现一个标准的FTP服务器和FTP客户端。第一章绪论介绍了课题的开发背景、选题的目的、FTP的现状分析、现行研究中存在的问题以及本次设计要达到的目标。第二章主要介绍了开发平台及相关技术。第三章FTP的工作原理 详细介绍了FTP的工作原理。第四章FTP服务器和客户端的设计本章包括了对FTP服务器和客户端的需求分析,概要设计,详细设计。第五章使用Java实现FTP的服务器和客户端进行实现。第六章 软件的测试运行和维护。2 系统可行性分析设计 与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。在FTP的使用当中,用户经常遇到两个概念:下载(Download)和上载(Upload)。下载文件就是从远程主机拷贝文件至自己的计算机上;上载文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上载(下载)文件。使用Java FTP类库实现文件上传下载、远程登录和文件共享的功能。要实现文件上传下载功能有多种方法。具体的数据传输流图如下图1所示:图1系统数据传输流图该项目的开发有充裕的时间,整个项目的开发流程如图2所示:图2 项目设计流程3 相关技术介绍3.1 FTP协议介绍FTP文件传送协议(File Transfer Protocol,简称FTP),是一个用于从一台主机到另一台主机传送文件的协议。 FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。 与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。 3.2 FTP工作原理FTP有两个过程一个是控制连接,一个是数据传输。FTP协议不像HTTP协议一样需要一个端口作为连接(默认时HTTP端口是80,FTP端口是21)。FTP协议需要两个端口,一个端口是作为控制连接端口,也就是FTP的21端口,用于发送指令给服务器以及等待服务器响应;另外一个端口用于数据传输端口,端口号为20(仅用PORT模式),是用建立数据传输通道的,主要作用是从客户向服务器发送一个文件,从服务器向客户发送一个文件,从服务器向客户发送文件或目录列表。3.3 FTP的传输模式FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问Internet, 你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。3.4 ASCII传输方式假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。3.4.1 二进制传输模式在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。3.5 FTP的工作方式FTP的工作方式FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。3.6 FTP命令与响应代码1, 标准 FTP 命令如下:表1 FTP 命令描述表命令描述ABOR中断数据连接程序ACCT 系统特权帐号ALLO 为服务器上的文件存储器分配字节APPE 添加文件到服务器同名文件CDUP 改变服务器上的父目录CWD 改变服务器上的工作目录DELE 删除服务器上的指定文件HELP 返回指定命令信息LIST 如果是文件名列出文件信息,如果是目录则列出文件列表MODE 传输模式(S=流模式,B=块模式,C=压缩模式)MKD 在服务器上建立指定目录NLST 列出指定目录内容NOOP无动作,除了来自服务器上的承认PASS 系统登录密码PASV请求服务器等待数据连接PORT IP 地址和两字节的端口 IDPWD显示当前工作目录QUIT从 FTP 服务器上退出登录REIN重新初始化登录状态连接REST 由特定偏移量重启文件传递RETR 从服务器上找回(复制)文件RMD 在服务器上删除指定目录RNFR 对旧路径重命名RNTO 对新路径重命名SITE 由服务器提供的站点特殊参数SMNT 挂载指定文件结构STAT 在当前程序或目录上返回信息STOR 储存(复制)文件到服务器上STOU 储存文件到服务器名称上STRU 数据结构(F=文件,R=记录,P=页面)SYST返回服务器使用的操作系统TYPE 数据类型(A=ASCII,E=EBCDIC,I=binary)USER 系统登录的用户名2,标准 FTP 信息如下:表2 标准 FTP 响应代码说明表响应代码解释说明110新文件指示器上的重启标记120服务器准备就绪的时间(分钟数)125打开数据连接,开始传输150打开连接200成功202命令没有执行211系统状态回复212目录状态回复213文件状态回复214帮助信息回复215系统类型回复220服务就绪221退出网络225打开数据连接226结束数据连接227进入被动模式(IP 地址、ID 端口)230登录因特网250文件行为完成257路径名建立331要求密码332要求帐号350文件行为暂停421服务关闭425无法打开数据连接426结束连接450文件不可用451遇到本地错误452磁盘空间不足500无效命令501错误参数502命令没有执行503错误指令序列504无效命令参数530未登录网络532存储文件需要帐号550文件不可用551不知道的页类型552超过存储分配553文件名不允许3.7 C/S架构简介客户机/服务器在分布处理过程中,使用基于连接的网络通信模式。该通信模式首先在客户机和服务器之间定义一套通信协议,并创建一Socket类,利用这个类建立一条可靠的链接;然后,客户机/服务器再在这条链接上可靠地传输数据。客户机发出请求,服务器监听来自客户机的请求,并为客户机提供响应服务。这就是典型的“请求-应答”模式。下面是客户机/服务器的一个典型运作过程: (1)服务器监听相应端口的输入; (2)客户机发出一个请求; (3)服务器接收到此请求;(4)服务器处理这个请求,并把结果返回给客户机; (5)上述过程,直至完成一次会话过程。3.8 JAVA简介Java是Sun公司推出的一种编程语言。Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型,高度抽象,采用纯面向对象编程的思想和方法。Java还带有很多的扩展的类包(Package),在程序中可以轻松调用,简化程序员的工作。Java程序运行的硬件或软件环境,称为平台。Java平台包括2个部分:Java虚拟机和Java应用程序接口。Java API:Java应用程序接口,用于Java程序的使用和Java虚拟机的接口。Java虚拟机用于将Java字节码翻译成特定机器码。基于硬件的平台,即Java程序运行的特定的硬件环境。3.8.1 FTP的一些特性 早期对FTP的定义指出,FTP是一个ARPA计算机网络上主机间文件传输的用户级协议。其主要功能是方便主机间的文件传输,并且允许在其他主机上进行方便的存储和文件处理。而现在FTP的应用范围则主要是Internet。 根据FTP STD 9定义,FTP的目标包括: 1) 促进文件(程序或数据)的共享 ; 2) 支持间接或隐式地使用远程计算机 ;3) 帮助用户避开主机上不同的 ;4) 可靠并有效地传输数据 。关于FTP的一些其他性质包括:FTP可以被用户在终端使用,但通常是给程序使用的。FTP中主要采用了传输控制协议(Transmission Control Protocol,TCP)PJ81,和Telnet 协议PJ83。 3.8.2 重要历史事件 1971年,第一个FTP的RFC(RFC 114)由A.K. Bhushan在1971年提出,同时由MIT与 Harvard实验实现。 1972年,RFC 172 提供了主机间文件传输的一个用户级协议。1973年2月,在长期讨论(RFC 265,RFC 294,RFC 354,RFC 385,RFC 430)后,出现了一个官方文档RFC 454。 1973年8月,出现了一个修订后的新官方文档 RFC 542。确立了FTP的功能、目标和基本模型。当时数据传输协议采用NCP。 1980年,由于底层协议从NCP改变为TCP,RFC 765 定义了采用TCP的FTP。1985年,一个作用持续至今的官方文档RFC 959(STD 9)出台。3.8.3 FTP模型 就模型而言,从1973年以来并没有什么变化。下图3是FTP使用模型: 图3 FTP使用模型注: 1. data connection 可以双向使用(双工); 2. data connection 不需要一直存在。 术语 :1.User PI(user-protocol interpreter): 用户协议解释器; 2.Server PI(Server-protocol interpreter): 服务协议解释器 ;3.control connection:控制连接 ;4.Data connection:数据连接 ;5.FTP Commands:FTP命令,描述Data connection的参数,文件操作类型; 6.FTP Replies:FTP命令,在图一描述的模型中,User PI创建control connection。control connection遵从Telnet协议。在用户初始化阶段,标准FTP命令被User PI生成并通过control connection 传到服务器处理。Server PI将相应的标准FTP应答通过control connection回传给User PI。数据传输由Data connection完成。 User DTP 在特定端口监听,由Server DTP 用指定参数初始化连接。另一种情形是用户希望在两台非本地的主机上传递文件。用户与两个服务器建立control connection,安排两个服务器间的文件传输。下图描述了这样的模型。 图4 服务器间交互模型3.8.4 FTP协议的安全扩展1、FTP常见加密方法: a.通过FTP传输预先被加密的文件 ; b.通过E-mail传输预先被加密的文件 ; c.通过PEM消息 ; d.通过使用Kerberos的rcp命令。2 、在RFC 2228 之前的FTP并不安全 虽然FTP采用 TELNET 协议执行connection control操作,而且 TELNET 协议后来又增补了认证和加密选项,但在RFC 1123 中禁止在connection control中进行 TELNET 选项协商。另外 TELNET 协议也没有提供完整性保护,而且也没有data connection 的保护。3、扩展命令 AUTH (Authentication/Security Mechanism),认证与安全机制; ADAT (Authentication/Security Data),认证与安全数据 ; PROT (Data Channel Protection Level),数据通道保护层次 ; PBSZ (Protection Buffer Size),保护缓冲大小 ; CCC (Clear Command Channel),清空命令通道 ; MIC (Integrity Protected Command),完整性保护命令 ; CONF (Confidentiality Protected Command), 保密保护命令 ; ENC (Privacy Protected Command),私有性保护命令 ; 一种新的返回类型(6yz)也被引入以保护返回值。 4 、协议状态图 下图描述了在一个提高了安全性的FTP实现中认证和和授权的流程。方形的块表示客户端需要发出的命令的状态,菱形的块表示服务器需要发出响应的状态。图5 协议状态图3.9 Java Swing技术介绍Java Swing技术是在AWT基础上构建的另一套桌面程序设计解决方案。它充分借鉴了AWT的优点也避免了许多AWT中的诟病。它所采用的MVC(Model View Controller)模式11-12更是得到了广泛的认可。Swing的组件几乎都是轻量级组件。与AWT组件不同的是:这些组件没有本地的对等组件是由纯Java实现的,所以它们不依赖于操作系统。与AWT的重量级组件相比Swing组件被称为轻量级组件。重量级组件在本地对等组件的同位体体系结构,Swing不但在不同的平台上表现一致而且还提供了本地组件不支持的特性。Swing可以容易地创建图形界面应用程序。使用Swing构造图形界面的一般步骤是:选择一个容器,设置容器的布局管理器,向容器添加组件,设置对应的事件监听器。顶层容器 ,当使用Java进行图形界面编程的时候,图在哪里绘制呢?需要一个能够提供图形绘制的容器,这个容器就被称为顶层容器。顶层容器是进行图形编程的基础,一切图形化的东西,都必然包括在顶层容器中。在Swing中,有三种可以使用的顶层容器,它们分别是: JFrame、JDialog、JApplet,通过这三个顶层容器我们灵活的设计我们的界面。组件是构成应用程序界面的基本元素,按钮、文本框、进度条等,这些都是组件。组件又可以分为容器组件和非容器组件。容器组件就是能包含其他组件的特殊组件,例如,Swing中的JPanel、JTabbedPane、JScrollPane等就属于容器型组件,非容器组件有JButton、JLabel、JTextField等 布局管理器是Java中用来控制组件排列位置的一种界面管理系统。常用的布局管理器有: BorderLayout:将界面分割为上下左右以及中间一块区域的管理系统,在BorderLayout布局中,最多你只能放5个控件,如果超过5个控件,建议还是选用其他的布局系统吧。GridLayout:GridLayout是将用户界面切割为棋盘一样的布局管理系统。FlowLayout:FlowLayout与上述两类布局管理系统不太一样,在FlowLayout中,只需要把控件加入到FlowLayout中,FlowLayout就会根据添加组件的顺序依次放置组件,如果空间不够,会自动换行。 Swing事件模型采用“监视器”模型,当事件被触发的时候,它将被一个或多个“监听器”接收,监听器负责处理事件,所以事件发生和事件处理的代码可以分离开来。所谓事件监听器,就是一个“实现特定类型的监听器接口”的类对象。所以要对某一事件进行监听,先创建一个监听器对象,然后把它注册到触发事件的组件。4 需求分析4.1 任务概述4.1.1 目标1、FTP实现的目标:1)促进文件的共享(计算机程序或数据) 2)鼓励间接或者隐式的使用远程计算机 3)向用户屏蔽不同主机中各种文件存储系统的细节 4)可靠和高效的传输数据2、缺点:1)密码和文件内容都使用明文传输,可能产生不希望发生的窃听。 2)因为必需开放一个随机的端口以建立连接,当防火墙存在时,客户端很难过滤处于主动模式下的FTP流量。这个问题通过使用被动模式的FTP得到了很大解决。服务器可能会被告知连接一个第三方计算机的保留端口。 3)FTP虽然可以被终端用户直接使用,但是它是设计成被FTP客户端程序所控制。运行FTP服务的许多站点都开放匿名服务,在这种设置下,用户不需要帐号就可以登录服务器,默认情况下,匿名用户的用户名是:“anonymous”。这个帐号不需要密码,虽然通常要求输入用户的邮件地址作为认证密码,但这只是一些细节或者此邮件地址根本不被确定,而是依赖于FTP服务器的配置情况。简而言之,本软件是一个FTP客户端软件,用来进行文件上传与下载,是一个FTP客户端类型程序。它的主要功能是让用户通过使用网络上的免费空间实现文件的上传与下载,提供可靠和高效的传输数据,进而实现文件的共享和远程登录功能。本软件要实现跨平台,及可以不经过任何修改在不同的平台下运行。4.1.2 用户特点本软件的最终用户所有FTP客户端的用户,具有专业领域范围广,教育水平参差不齐的特点。4.2 需求规定4.2.1 对功能的规定于图形界面的形式提供给用户使用,用户可以配置所要使用的FTP客户端的帐户的信息,同时支持多个帐户。用户可以对帐户信息进行修改、删除、增加的操作。用户可用通过图形界面,在相应的字段中填写相应的内容,创建多个FTP帐户连接多个FTP站点。用户可以将数据上传到指定站点的指定账户,并同步下载账户空间上的数据文件,实现数据同步。4.2.2 对性能的规定绘制图形界面,用FTP协议实现数据和文件上传于下载,并带有远程登录以及文件传输过程的断点可续功能。要具有高度的灵活性,在不同的平台上可以不经过修改就可以运行。操作要简单明了,用户能够容易上手。在有新功能要添加时,能够不经过修改现有代码就能够把新功能通过插件的形式添加到现有的系统中。4.2.3 流量图标和空间文件查看当用户进行数据文件上传和下载的过程中,可以以流量图的形式实时的显示在客户端界面上,用户可以通过流量图得到数据传输的情况。另外当用户登陆到指定账户时,可以即时从指定账户中获得账户中的文件目录以及文件的大小和创建修改时间,同时在界面的左侧显示本机上数据文件的名称大小创建时间等,以便为实现数据文件的同步和共享打下便利的基础。4.3 运行环境规定4.3.1 设备Intel Pentium 2及以上处理器,32M以上内存,4G以上硬盘。Microsoft Windows 9X/NT操作系统或者linux操作系统。800*600或以上的屏幕分辨率。4.3.2 支持软件开发平台:Windows XP。开发工具:MyEclipse6.5,jdk1.6。测试工具:MyEclipse6.5运行环境:windows或linux,Unix。5 概要设计5.1 总体设计5.1.1 设计思路上传下载程序主要完成文件的传输,是系统的核心模块。MyEclipse提供的FTP接口已经对其进行了类封装,因而对用户而言它是透明的,不必再去编程解释响应消息等,这就是接口的好处。这样使用MyEclipse,就节约了大量的开发时间。即使对FTP不是很了解,都可以很快建立起一个FTP客户端程序来。由于本程序只是FTP客户端,下面将分别对整个系统的图形界面、登录模块、远程浏览模块、本地浏览模块、上传模块和下载模块六大模块的程序实现细节进行详细介绍。5.2 系统模块的实现5.2.1 界面模块实现Java是一个面向对象的程序语言,它使用了很多对象,在MyEclipse中使用的是JDK库(awt,swing),它提供了很多的界面对象,可以很直观的看到设计的界面。文件处理界面的设计是在swing的基础上实现的,增加了一些其他控件。它是由三大部分组成:FTP服务器列表,本地主机列表,操作时信息列表。还有三个按钮:上传,下载,选择目录下个命令按钮。public class Frame1 extends JFrame private JPanel contentPane;private JTextField jTextField1 = new JTextField();private JTextField 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 xYLayout1 = 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 xYLayout2 = new XYLayout();BorderLayout borderLayout2 = new BorderLayout();jscrollPane jscrollPane1 = new jscrollPane();JButton jButton3 = new JButton();JButton jButton4 = new JButton();jscrollPane jscrollPane2 = new jscrollPane();5.2.2 浏览程序我们利用FtpClient控件可以实现FTP客户端应用程序的浏览功能,浏览功能的实现程序由浏览服务器端文件和浏览本地文件两部分组成。5.2.3 浏览服务器端目录程序当连接登录成功之后,可使用FtpClient控件的List()方法执行FTP服务器端上的目录浏览(List)功能,以取得FTP服务器默认的目录内容。一般List方法会列出FTP端目录与文件的详细内容,包括创建文件日期,文件大小,目录与文件的名称等相关信息。当然,FTP服务器端必须开放目录读取的权限,以允许连接登录及浏览目录,否则,Connect方法会执行失败。而这个方法执行后的结果是TelnetInputStream数据流,本系统要把它显示在一个列表框中,还需要进行分解操作。下面是对列表框进行操作的程序代码:/清空目录列表,调用List()方法获取文件列表。private void ReloadList()StringBuffer buf=new StringBuffer();int ch;list1.removeAll();/清空目录列表try /调用List()方法得到目录表TelnetInputStream t = ftp.list();t.setStickyCRLF(true);/分解TelnetInputStream数据流while ( (ch = t.read() = 0) if (ch = n) /向列表框添加分解得到的目录和文件list1.add(getDIR(buf.toString();buf.setLength(0);else buf.append( (char) ch);/完成后关闭TelnetInputStream数据流t.close();catch (IOException ex) ex.printStackTrace();显示FTP服务器上的文件详细信息:函数listFileAllStr(),用来获取指定服务器文件夹内所有文件的所有信息。param serverDir_str 服务器上的文件夹绝对目录return Vector : 其中Vector的每个元素是一个文件的全部属性private Vector listFileAllStr(String serverDir_str) String dataofList_str = null;try dataofList_str = this.doListNoEffect(serverDir_str); catch (IOException e) e.printStackTrace();this.close();if (dataofList_str = null | dataofList_str = )return null;else int i = 0, j;Vector fileAll_v = new Vector();while( i = 9) String all_array = new String7;boolean isDir = false;for (int k = 0; k 5; k+)all_arrayk = stk.nextToken();if (all_array0.charAt(0) = d) isDir = true;all_array5 = stk.nextToken();for (int k = 0; k 2; k+)all_array5 = all_array5 + + stk.nextToken();/ NameString fileName_str = stk.nextToken();while(stk.hasMoreTokens()fileName_str += + stk.nextToken();if (!fileName_str.equals(.) & !fileName_str.equals(.) if (isDir)fileName_str += /;all_array6 = fileName_str;fileAll_v.add(all_array);i = j + 1;return fileAll_v;5.2.4 文件下载和上传程序通过浏览程序对FTP服务器和本地文件系统的浏览,解决了客户端和服务器端的文件和目录选择的问题,但是文件数据是需要传送和交换的,下面我们将介绍如何实现文件的下载和上传等操作过程。 1、文件下载程序当我们想下载文件,可以使用TelnetInputStream流,并使用FTPClient控件的get方法将流的源头绑定,再将TelnetInputStream流绑定到DataInputStream流中,然后再在本地新建一个文件,并绑定到RandomAccessFile流中,执行DataInputStream流的读并写入RandomAccessFile流中,就可以完成下载功能了。当然,程序首先需要判断本地浏览框中选中的是目录还是文件,或者根本就没有在本地浏览框中选择。为了可同时选择多个文件下载,必须先设置list1控件的MultipleMode属性为true,以便能够在远程浏览框中进行多重选择。接着在程序中利用list1控件对象的getSelectedItems方法获取所选择的文件和目录,并判断是否为目录;若是目录,则在本地创建一个目录(本实例没有使用递归的方法,所以不能下载目录中的文件和子目录),否则,将进行文件下载。一直重复至所有被选择文件或者目录都被完成操作为止。在这里,使用了一个isfile的boolean变量用于判断是否为文件。从FTP服务器上下传一个文件代码如下:void getButton_actionPerformed(ActionEvent e) String server=serverEdit.getText(); String user=userEdit.getText(); String password=passwordEdit.getText(); String path=pathEdit.getText(); String filename=filenameEdit.getText(); try FtpClient ftpClient=new FtpClient(); ftpClient.openServer(server); ftpClient.login(user, password); if (path.length()!=0) ftpClient.cd(path); ftpClient.binary(); TelnetInputStream is=ftpClient.get(filename); File file_out=new File(filename); FileOutputStream os=new FileOutputStream(file_out); byte bytes=new byte1024; int c; while (c=is.read(bytes)!=-1) os.write(bytes,0,c); is.close(); os.close(); ftpClient.closeServer(); catch (IOException ex) ; 2 、文件上传程序上传文件基本上与下载文件类似,不过使用的是TelnetOutputStream流,并使用FTPClient控件的put方法和流绑定,再将TelnetOutputStream流绑定到DataOutputStream流中,然后在本地新建一个文件,并绑定到RandomAccessFile流中,执行RandomAccessFile流的读并写入DataOutputStream流中,就可以完成上传功能了。向FTP服务器上上传一个文件代码如下:void putButton_actionPerformed(ActionEvent e) String server=serverEdit.getText(); String user=userEdit.getText(); String password=passwordEdit.getText(); String path=pathEdit.getText(); String filename=filenameEdit.getText(); try FtpClient ftpClient=new FtpClient(); ftpClient.openServer(server); ftpClient.login(user, password); if (path.length()!=0) ftpClient.cd(path); ftpClient.binary(); TelnetOutputStream os=ftpClient.put(filename); File file_in=new File(filename); FileInputStream is=new FileInputStream(file_in); byte bytes=new byte1024; int c; while (c=is.read(bytes)!=-1) os.write(bytes,0,c); is.close(); os.close(); ftpClient.closeServer(); catch (IOException ex) ; 3、JFTP协议接口public class ProtocolInterface /* * * Field */final boolean DEBUG_JUNBO = true;final int PORT_LOW = 0x1000; final int PORT_HIGH = 0x7FFF;enum TransType APPEND, RETRANS;/enum TransMode S, B, C;/enum TransStru F, R, P;/enum private TransType storType = TransType.RETRANS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论