课程设计报告_第1页
课程设计报告_第2页
课程设计报告_第3页
课程设计报告_第4页
课程设计报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

目录摘要1一、引言21.1 FTP工作原理21.2 C/S原理3二、系统需求分析32.1功能需求32.3系统工作流程设计4三、系统详细设计53.1主要模块设计:53.2界面设计:7四、系统测试10五、系统使用说明115.1程序说明115.2操作流程11六、心得体会12摘要随着互联网技术的飞速发展,信息共享的时代已经到来。在实现数据传输与信息共享的诸多方式中,FTP已成为是应用最广的一种方式。FTP协议是计算机网络中的应用层协议,提供了可靠的文件传输功能,并且具有跨平台特性,两个不同类型的操作系统只要都支持FTP协议就可以进行文件传输工作。此课程设计的目标是做一个FTP客户端,用户能通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP 服务器程序,然后发出命令,服务器程序执行,并将执行的结果返回到客户机,实现用户通过客户机程序向(从) 远程主机上载(下载)文件的功能呢GV。关键字: FTP; java; 远程连接; 上传; 下载一、引言1.1 FTP工作原理1.1.1两种模式FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive(也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。其中Port的工作原理为FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。其中Passive的工作原理为在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。 在本项目中,我们采用的是PORT主动方式,使客户端首先和FTP服务器的TCP 21端口建立连接。1.1.2使用步骤(1)FTP服务器运行FTPd守护进程,等待用户的FTP请求。 (2)用户运行FTP命令,请求FTP服务器为其服务。 例:FTP 97 (3)FTPd守护进程收到用户的FTP请求后,派生出子进程FTP与用户进程FTP交互,建立文件传输控制连接,使用TCP端口21。 (4)用户输入FTP子命令,服务器接收子命令,如果命令正确,双方各派生一个数据传输进程FTP-DATA,建立数据连接,使用TCP端口20,进行数据传输。 (5)本次子命令的数据传输完,拆除数据连接,结束FTP-DATA进程。 (6)用户继续输入FTP子命令,重复(4)、(5)的过程,直至用户输入quit命令,双方拆除控制连接,结束文件传输,结束FTP进程。1.2 C/S原理C/S 结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。本文的FTP也是一个客户机/服务器系统,用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP 服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。在FTP的使用当中,用户经常遇到两个概念:(Download) 和“上载”(Upload)。“下载”文件就是从远程主机拷贝文件至自己的计算机上;“上载”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从) 远程主机上载(下载)文件。二、系统需求分析2.1功能需求要设计一个具有界面的并且能够友好交互的FTP客户端,基本的功能需求分析如下所示:2.1.1 连接需求根据用户所提供的IP、FTP 服务器域名,用户账户和密码与所选择的服务器进行连接,如果连接成功则显示连接成功的提示信息; 如果失败则显示连接失败的提示信息。2.1.2文件浏览需求能够改变当前文件目录,登陆到指定的服务器后能够查看服务器的文件信息,包括目录、文件名称、文件大小等信息。2.1.3文件下载与上传需求用户能够从服务器端下载所需要的文件到指定的本地目录,也能够把本地目录的文件上传到服务器端的特定目录里。2.1.4进度提示功能能够用进度条的形式告诉用户当前上传和下载的进度。2.1.5选择保存路径能够对下载的文件进行指定路径保存。2.2系统模型设计FTP的基本模型2.3系统工作流程设计FTP设计总流程图三、系统详细设计3.1主要模块设计:使用SUN公司提供的FTP客户端类库。主要包括4个类:.TelnetInputStream .TelnetOutputStream .ftp.FtpClient .ftp.FtpLoginException 编写FtpBean类实现业务逻辑,包含一个FtpClient类的对象ftpClient。包含的方法如下:(1) 建立连接String connect(String dir, String (username, passwd); (2) 获取文件名列表List getFileNameList() 使用InputStreamReader isr = null; BufferedReader br = null; isr = new InputStreamReader(this.ftpCList(this.getDir(); br = new BufferedReader(isr); 取输入流来得到目录中的文件信息;(3) 判断路径boolean isDir(String line) 使用line.startsWith(d)函数来判断;(4) 设置路径boolean setPath(String path) 使用ftpClient.cd(path)函数来实现;(5) 上传文件boolean uploadFile(String localFile, String targetFileName)使用ftpClient.cd(path)函数来实现;TelnetOutputStream tos=null; RandomAccessFile sendFile=null; DataOutputStream dos=null; try File file=new File(localFile); sendFile=new RandomAccessFile(file, r); sendFile.seek(0); tos=this.ftpClient.put(targetFileName); dos=new DataOutputStream(tos); int ch = 0; while (sendFile.getFilePointer()sendFile.length() ch=sendFile.read(); dos.write(ch); 来获取文件输出流,读取数据并写入文件;(6) 下载文件boolean downloadFile(String srcFileName, String targetFileName)TelnetInputStream tis = null; RandomAccessFile getFile = null; boolean result = true;try File file=new File(targetFileName);getFile=new RandomAccessFile(file,rw); getFile.seek(0); tis=this.ftpClient.get(srcFileName); DataInputStream dis=new DataInputStream(tis); int ch = 0; while (true) ch = dis.read(); if (ch 0) break; getFile.write(ch) getFile.close();获取文件输入流,读取数据并写入文件;(7) 进入上一级文件目录up() 使用ftpClient.cdUp()函数来实现;(8)进入下一级文件目录downDir() 使用上面的方法来实现下一级文件目录的访问;(9) 给文件重命名boolean renameFile(String oldName, String newName)使用ftpClient.rename(oldName, newName);来实现;(10)删除文件deleteFile(String fileName)使用String cmd = DELE + fileName + rn; ftpClient.sendServer(cmd); 来实现(11) 获取当前路径String getDir() 使用return this.ftpClient.pwd();实现(12) 关闭连接String close() 使用ftpClient.closeServer();实现3.2界面设计: private void initComponents() /初始化程序界面的方法setIconImage(icon.getImage();java.awt.GridBagConstraints gridBagConstraints;ftpPanel = new FtpPanel(this); / 初始化FTP远程资源面板localPanel = new LocalPanel(this); / 初始化本地资源管理面板uploadPanel = new UploadPanel(); / 初始化上传队列面板downloadPanel = new DownloadPanel(); / 初始化下载队列面板queuePanel = new QueuePanel(this); / 初始化队列面板setTitle(FTP上传下载);addWindowListener(new java.awt.event.WindowAdapter() public void windowOpened(java.awt.event.WindowEvent evt) formWindowOpened(evt);public void windowIconified(final WindowEvent e) setVisible(false););linkTo.setText(连接到);linkTo.setAction(LINK_TO_ACTION);jToolBar1.add(linkTo);cutLinkButton.setText(断开);cutLinkButton.setAction(CUT_LINK_ACTION);jToolBar1.add(cutLinkButton);private void linkButtonActionPerformed(java.awt.event.ActionEvent evt) try String server = serverTextField.getText(); / 获取服务器地址if (server = null) return;String portStr = portTextField.getText(); / 获取端口号if (portStr = null) portStr = 21;int port = Integer.parseInt(portStr.trim();userStr = userTextField.getText(); / 获取用户名if(userStr.equals() & checkboxes.isSelected()userStr=Anonymous; else userStr=userStr.trim();passStr = PassField.getText(); / 获取密码if(passStr.equals()& checkboxes.isSelected()passStr=331;elsepassStr=passStr.trim();cutLinkButton.doClick();ftpClient = new FtpClient();ftpClient.openServer(server.trim(), port); / 连接服务器ftpClient.login(userStr, passStr); / 登录服务器ftpClient.binary(); / 使用二进制传输模式if (ftpClient.serverIsOpen() / 如果连接成功CUT_LINK_ACTION.setEnabled(true); / 设置断开按钮可用 else / 否则CUT_LINK_ACTION.setEnabled(false); / 设置断开按钮不可用return; / 并结束事件处理/ 设置本地资源管理面板的FTP连接信息localPanel.setFtpClient(server, port, userStr, passStr);/ 设置上传按钮可用localPanel.getActionMap().get(uploadAction).setEnabled(true);ftpPanel.setFtpClient(ftpClient);/ 设置FTP资源管理面板FTP连接信息/ 设置下载按钮可用ftpPanel.getActionMap().get(downAction).setEnabled(true);ftpPanel.refreshCurrentFolder();/ 刷新FTP资源管理面板的当前文件夹queuePanel.startQueue(); / 启动任务队列线程 catch (Exception ex) ex.printStackTrace();public FtpClient getFtpClient() return ftpClient;public void setLinkInfo(SiteInfoBean bean) serverTextField.setText(bean.getServer(); / 设置主机地址portTextField.setText(bean.getPort() + ); / 设置端口号userTextField.setText(bean.getUserName(); / 设置用户名PassField.setText(); / 密码清空PassField.requestFocus(); / 密码框请求焦点四、系统测试如图所示,首先输入一个可以使用的FTP服务器的地址或自己配置一个FTP服务器,然后取得相应的权限。运行设计完成的FTP客户端,并填写相关内容,点击“连接”按钮正常连入主机;这样我们就可以看到左边的是远程服务器端的文件与目录,而右边是本地文件与目录,我们可以点击 “上传”和“下载”两个按钮对文件进行上传或下载操作,非常简捷,方便。当完成相关操作后,我们可以点击“断开”命令按钮来断开FTP连接,以保证FTP用户正确安全的退出。实验测试表明我们设计的FTP客户端程序已经实现了标准的FTP客户端的基本功能。系统主界面功能图五、系统使用说明5.1程序说明本程序没有使用数据库,导入项目以后不需要再对数据库进行配置就可以启动运行。项目启动文件为src/com/lzw/ftp/FTP_Client_Frame.java。5.2操作流程运行程序,打开程序主界面,如图1所示。输入FTP地址、用户名及密码,单击“连接”按钮,连接FTP服务器。如果Ftp服务器支持匿名登录,选中匿名即可进行匿名登录。

温馨提示

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

评论

0/150

提交评论