《FTP客户端的设计与实现计算机网络课程设计报告.doc》由会员分享,可在线阅读,更多相关《FTP客户端的设计与实现计算机网络课程设计报告.doc(27页珍藏版)》请在三一办公上搜索。
1、课程设计报告课程名称: 计算机网络 设计题目: FTP客户端的设计与实现 系 别: 计算机与信息工程学院 专 业: 计算机科学与技术 计算机科学与技术系二一 一年制课程设计任务书课程设计题目FTP客户端的设计与实现组长学号2011220081班级计专112班系别计算机与信息工程学院专业计算机科学与技术组员指导教师课程设计目的根据FTP协议的工作原理,实现一个FTP的客户端程序课程设计所需环境开发环境:JCreator Pro 运行环境:Windows操作系统课程设计任务要求(1) 根据账号和密码登录指定的FTP服务器;(2) 能够查看服务器内容列表,重命名或删除指定的文件/文件夹;(3) 上传
2、或下载选定的文件到服务器上。课程设计工作进度计划序号起止日期工 作 内 容分工情况12011-11-25至2011-11-28明确设计目的,网上、图书馆搜查资料小组成员共同参与22011-11-29至2011-12-5界面设计,连接服务器,获取文件列表,断开连接32011-12-2至2011-12-6上传文件、下载文件由42011-12-5至2011-12-8删除、重命名文件及刷新列表由52011-12-5至2011-12-8返回上级目录,查看日志信息由62011-12-7至2011-12-9最后整合测试修改由指导教师签字: 年 月 日教研室审核意见:教研室主任签字: 年 月 日目 录第一章
3、序言31.1课题来源31.2开发工具4第二章 系统需求分析52.1功能需求52.2 系统模型设计52.3 系统工作流程设计5第三章 系统设计63.1实现功能63.2函数说明63.2.1界面设计代码63.2.2功能实现函数10第四章 系统实现134.1界面设计的实现134.1.1连接服务器134.1.2获取文件列表144.1.3断开服务器154.1.4上传文件164.1.5下载184.1.6重命名194.1.7删除214.1.8刷新224.1.9返回上一目录234.1.10查看日志信息23第五章 总结24第六章 参考文献25第一章 序言 耿桂花1.1课题来源FTP(File Transfer P
4、rotocol, FTP)是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unencode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间会非常长,并且不时的必需执行一些冗长的登陆进程。FTP服务一般运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是
5、命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话会被防火墙断开,传输会产生一些错误。FTP客户端主要目标是:促进文件的共享(计算机程序或数据);鼓励间接或者隐式的使用远程计算机;向用户屏蔽不同主机中各种文件存储系统的细节;可靠和高效的传输数据。因此,开发FTP客户端成为一个很有必要的事情。1.2开发工具随着程序设计技术的改革和计算机环境的改变,Java语言也得到了迅速发展。一方面,C+等面向对象程序设计语言的发展为Java提
6、供了基础。事实上,Java也大量继承了C以及C+的成果,并增加了体现程序设计发展状态的功能。另一方面,网络及Internet的发展对程序设计提出了新的要求,为Java的发展注入了强大的动力。正是Internet的快速发展和普及,改变了传统的计算模式,促进了Java的普及与流行。它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,以“Java”的名称正
7、式发布。Java 编程语言的风格十分接近C、C+语言。Java是一个纯的面向对象的程序设计语言,它继承了 C+ 语言面向对象技术的核心,Java舍弃了C +语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。
8、它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在 J2SE 1.4.2 发布后,Java 的执行速度有了大幅提升。 与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和
9、封闭式的模式完全不同。 Java 编程语言的主要特性是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。 第二章 系统需求分析 方莹莹2.1功能需求1.实现一个图形用户界面的FTP客户端,保证文件的安全传输和存储。2.通过输入服务器地址、用户名和密码、可以实现远程FTP主机的登录。3.提供本地文件的上传功能,可对FTP主机文件进行下载、上传、删除、重命名等文件操作。4.可以查看一系列的操作的日志信息。2.2 系统模型设计控制进程数据传送进程用户接口命令与应答控制连接数据连接文件传输数据传送进程控制进程服务器客户端FTP的基本模型2.3 系统工作流程设计
10、客户端用户登录登录验证操作内容列表查看文件列表连接成功至服务器端上传文件重命名文件上翻文件列表删除文件下翻文件列表下载文件文件管理连接失败退出FTP设计总流程图第三章 系统设计 高进3.1实现功能 用户登陆、用户退出、文件上传、文件下载、文件重命名文件删除、上翻文件目录、下翻文件目录界面实现部分:设计为一个用户界面,上面包括各种用户按钮、文本输入栏、状态栏等等。具体如下:服务器地址信息输入栏、端口信息输入栏、用户名、密码输入栏、用户登陆(连接)按钮、用户退出(断开连接)按钮、服务器文件显示列表框、下载文件按钮、上传文件按钮、重命名文件按钮、删除文件按钮、上一级目录按钮,下一级目录按钮,状态栏。
11、3.2函数说明3.2.1界面设计代码 每个按钮对象注册监听器对应相关的业务逻辑,调用FtpBean类中的对应方法。下面是页面部分实现的主要代码以及相关说明:package ftp;import java.awt.event.*;import java.awt.*;import java.util.*;import java.util.List;import java.util.StringTokenizer;import java.io.*;import javax.swing.*;import javax.swing.event.*;public class FTP extends JFra
12、meFtpBean ftp=new FtpBean();/FTP客户端对象 private FileWriter write ;private PrintWriter out;private Date time; private JTextField url = new JTextField(); /FTP服务器地址 private JTextField port = new JTextField(); /FTP服务器端口 private JTextField username = new JTextField(); /用户名 private JTextField password = new
13、 JTextField(); /密码private JTextField status = new JTextField();/当前状态private JButton connectButton=new JButton(连接);/连接按钮private JButton closeButton=new JButton(断开连接);/断开连接按钮private JPopupMenu popup = new JPopupMenu();private JMenuItem refresh = new JMenuItem(刷新); /右键弹出菜单private JMenuItem delete = new
14、 JMenuItem(删除); private JMenuItem download = new JMenuItem(下载); private JMenuItem upload = new JMenuItem(上传); private JMenuItem rename = new JMenuItem(重命名);private JMenuItem upDir = new JMenuItem(上级目录);private JMenuItem showLog = new JMenuItem(显示日志信息);final DefaultListModel m=new DefaultListModel();
15、 /显示文件列表JList fileList = new JList(m);JScrollPane fileScrollPane;private Dimension faceSize = new Dimension(400, 600); /框架大小public FTP() init(); createPopup(); /弹出菜单time = new Date();try write = new FileWriter(log.txt,true);out = new PrintWriter(write,true); catch(IOException ioe) ioe.printStackTrac
16、e(); status.setEditable(false); this.add(status,BorderLayout.SOUTH); /下方connectButton.addActionListener( new ActionListener() public void actionPerformed(ActionEvent e) connect(); );closeButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) close();time = new Date(
17、);out.println(time+ 离开服务器:+url.getText(); ); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /添加框架的关闭事件处理 this.pack(); this.setSize(faceSize); /设置框架的大小Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();this.setLocation( (int) (screenSize.width - faceSize.getWidth() / 2,(int) (sc
18、reenSize.height - faceSize.getHeight() / 2);this.setResizable(false);this.setTitle(FTP服务端); /设置标题setVisible(true);this.addWindowListener(/关闭程序时的操作 new WindowAdapter() public void windowClosing(WindowEvent e) close(); System.exit(0); );void init() Container contentPane = getContentPane(); /获取面板conten
19、tPane.setLayout(new BorderLayout(); /设置布局JPanel up = new JPanel();/设置面板上方控件布局up.setLayout(new GridLayout(3,2);url.setText(10.255.76.126);port.setText(21);username.setText(gaojin);password.setText(gaojin);JPanel no1 = new JPanel();no1.setLayout(new BorderLayout();no1.add(new JLabel(服务器:),BorderLayout
20、.WEST);no1.add(url,BorderLayout.CENTER);JPanel no2 = new JPanel();no2.setLayout(new BorderLayout();no2.add(new JLabel(端口号:),BorderLayout.WEST); no2.add(port,BorderLayout.CENTER);JPanel no3 = new JPanel();no3.setLayout(new BorderLayout();no3.add(new JLabel(用户名:),BorderLayout.WEST);no3.add(username,Bo
21、rderLayout.CENTER);JPanel no4 = new JPanel();no4.setLayout(new BorderLayout();no4.add(new JLabel(密码 :),BorderLayout.WEST);no4.add(password,BorderLayout.CENTER);up.add(no1);up.add(no2);up.add(no3);up.add(no4);up.add(connectButton);up.add(closeButton);closeButton.setEnabled(false);this.add(up,BorderLa
22、yout.NORTH);/上方 fileScrollPane = new JScrollPane(fileList,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);fileScrollPane.setPreferredSize(new Dimension(300,400);this.add(fileScrollPane,BorderLayout.CENTER); /中部3.2.2功能实现函数 使用SUN公司提供的FTP客户端类库。主要包括4个类:.TelnetInputSt
23、ream.TelnetOutputStream.ftp.FtpClient.ftp.FtpLoginException编写FtpBean类实现业务逻辑,包含一个FtpClient类的对象ftpClient。包含的方法如下:(1) 建立连接String connect(String dir, String hostname, int port, String username,String passwd)使用 ftpClient = new FtpClient(hostname, port); ftpClient.login(username, passwd);(2) 获取文件名列表List g
24、etFileNameList()使用 InputStreamReader isr = null; BufferedReader br = null;isr = new InputStreamReader(this.ftpClient.nameList(this.getDir();br = new BufferedReader(isr);获取输入流来得到目录中的文件信息(3) 判断路径boolean isDir(String line)使用line.startsWith(d)来判断(4) 设置路径boolean setPath(String path)使用ftpClient.cd(path);实
25、现(5) 上传文件boolean uploadFile(String localFile, String targetFileName)使用 ftpClient.cd(path);实现(5) 上传文件boolean uploadFile(String localFile, String targetFileName)使用 TelnetOutputStream tos = null; RandomAccessFile sendFile = null; DataOutputStream dos = null; try File file = new File(localFile); sendFil
26、e = 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
27、 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 =
28、 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) 删除文件deleteFi
29、le(String fileName)使用String cmd = DELE + fileName + rn; ftpClient.sendServer(cmd);来实现(11) 获取当前路径String getDir()使用return this.ftpClient.pwd();实现(12) 关闭连接String close()使用ftpClient.closeServer();实现第四章 系统实现 单连晖 陈智4.1界面设计的实现4.1.1连接服务器 单击连接若服务器名称、端口、用户名和密码对的前提下登录到指定的服务器上面,弹出“登录成功”对话框,并在下方状态栏中显示“登录成功4.1.2获
30、取文件列表 登录到服务器上面之后,获取在服务器用户的主文件及文件夹并在下方状态栏显示4.1.3断开服务器当用户需要关闭连接时,单机“断开连接”就可断开与服务器的连接,在状态栏上显示“连接已断开”,此时并不退出客户端。4.1.4上传文件 右击弹出快捷菜单单击上传显示上传对话框选择需要上传的文件单击打开即可上传,上传成功显示“上传成功”对户框,并在状态栏显示当前状态4.1.5下载 单击下载弹出下载主机路径,指定目录以及文件名称,单击打开下载成功会弹出对话框“下载文件+源文件具体目录+成功”4.1.6重命名 选中需要重命名的文件或者文件夹,右击弹出快捷菜单,单击重命名在弹出的对话中输入新的名称,然后
31、单击确定弹出重命名成功的消息框 4.1.7删除 选中需要删除的文件,右击弹出快捷菜单,单击删除弹出删除文件成功消息框此时的文件夹已经把选中的从列表中移除4.1.8刷新 当进行上传,重命名、删除或者服务器更新列表时,文件列表没有及时更新,可以点击刷新按钮进行显示4.1.9返回上一目录 在文件夹子目录需要返回上一级目录时,单击“上级目录”即可以实现 4.1.10查看日志信息 日志信息是对用户操作的记录,如果需要查看,单击查看日志信息即可打开记录日志的文件第五章 总结 董翠莲在老师的指导下,经过我们小组成员的积极探讨和研究,我们终于完成了小组的课程设计FTP客户端的设计与实现。虽然我们在该系统功能上
32、还有许多不足,但通过这一段时间的设计,从拟定方案,设计模块,解决开发过程中遇到的各种困难,最终实现了该文件传输系统的基本功能。使我们对FTP客户端有了更深的了解。FTP的目标是提高文件的共享性和可靠高效地传送数据,而FTP客户端的作用是使用户方便的连接和访问FTP客户端。该设计实现了简单的FTP客户端,选择java类库使客户通过FTP客户端能简单地连接和访问,上传、下载、删除、刷新、返回上级目录等基本的操作功能。我们选择Java来实现主要是它在程序上显得更加简捷灵活,并具有较好的可扩充性和移植性。第六章 参考文献【1】 谢希仁 计算机网络(第五版)【M】。北京:电子工业出版社,2006。【2】 赵生慧等编译 Java面向对象程序设计(第二版)【M】。北京:中国水利水电出版社,2010。 【3】杨树林,胡洁萍Java语言最新实用案例教程【M】。北京:科学出版社,2006。【4】叶俊明 软件工程【M】。北京:清华大学出版社,2006:第三章 软件需求分析基础。【5】W.Richard Stevens.TCP/TP详解卷1:协议【M】。北京:机械工业出版社,2000。评语