




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河南理工大学计算机科学与技术学院课程设计报告2015 2016学年第一学期课程名称 计算机网络 设计题目 FTP客户端的设计与实现姓 名 * * 学 号 361309010410 专业班级 计科合1304 指导教师 孟 慧 2016年 1 月 9 日目 录第一章 序言21.1课程设计题目31.2开发工具3第二章 系统需求分析52.1功能需求52.2 系统模型设计52.3 系统工作流程设计5第三章 系统设计63.1实现功能63.2函数说明63.2.1界面设计代码63.2.2功能实现函数9第四章 系统实现134.1界面设计的实现134.1.1连接服务器134.1.2获取文件列表134.1.3断开服务器144.1.4上传文件154.1.5下载164.1.6重命名184.1.7删除194.1.8刷新204.1.9返回上一目录214.1.10查看日志信息21第五章 总结22第六章 参考文献23第一章 序言 1.1课程设计题目FTP(File Transfer Protocol, FTP)是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unencode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间会非常长,并且不时的必需执行一些冗长的登陆进程。FTP服务一般运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话会被防火墙断开,传输会产生一些错误。FTP客户端主要目标是:促进文件的共享(计算机程序或数据);鼓励间接或者隐式的使用远程计算机;向用户屏蔽不同主机中各种文件存储系统的细节;可靠和高效的传输数据。1.2开发工具随着程序设计技术的改革和计算机环境的改变,Java语言也得到了迅速发展。一方面,C+等面向对象程序设计语言的发展为Java提供了基础。事实上,Java也大量继承了C以及C+的成果,并增加了体现程序设计发展状态的功能。另一方面,网络及Internet的发展对程序设计提出了新的要求,为Java的发展注入了强大的动力。正是Internet的快速发展和普及,改变了传统的计算模式,促进了Java的普及与流行。它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,以“Java”的名称正式发布。Java 编程语言的风格十分接近C、C+语言。Java是一个纯的面向对象的程序设计语言,它继承了 C+ 语言面向对象技术的核心,Java舍弃了C +语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在 J2SE 1.4.2 发布后,Java 的执行速度有了大幅提升。 与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。 Java 编程语言的主要特性是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。 第二章 系统需求分析 2.1功能需求1.实现一个图形用户界面的FTP客户端,保证文件的安全传输和存储。2.通过输入服务器地址、用户名和密码、可以实现远程FTP主机的登录。3.提供本地文件的上传功能,可对FTP主机文件进行下载、上传、删除、重命名等文件操作。4.可以查看一系列的操作的日志信息。控制进程数据传送进程用户接口命令与应答控制连接数据连接文件传输数据传送进程控制进程服务器客户端2.2 系统模型设计FTP的基本模型客户端用户登录登录验证操作内容列表查看文件列表连接成功至服务器端上传文件重命名文件上翻文件列表删除文件下翻文件列表下载文件文件管理连接失败退出2.3 系统工作流程设计第三章 系统设计 3.1实现功能 1. 用户登陆、用户退出、文件上传、文件下载、文件重命名2. 文件删除、上翻文件目录、下翻文件目录3. 界面实现部分:设计为一个用户界面,上面包括各种用户按钮、文本输入栏、状态栏等等。具体如下:服务器地址信息输入栏、端口信息输入栏、用户名、密码输入栏、用户登陆(连接)按钮、用户退出(断开连接)按钮、服务器文件显示列表框、下载文件按钮、上传文件按钮、重命名文件按钮、删除文件按钮、上一级目录按钮,下一级目录按钮,状态栏。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 JFrameFtpBean 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 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 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(); /显示文件列表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.printStackTrace(); 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();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) (screenSize.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(); /获取面板contentPane.setLayout(new BorderLayout(); /设置布局JPanel up = new JPanel();/设置面板上方控件布局up.setLayout(new GridLayout(3,2);url.setText(26);port.setText(21);username.setText(gaojin);password.setText(gaojin);JPanel no1 = new JPanel();no1.setLayout(new BorderLayout();no1.add(new JLabel(服务器:),BorderLayout.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,BorderLayout.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,BorderLayout.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个类:.TelnetInputS.TelnetOutputS.ftp.FtpC.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 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);实现(5) 上传文件boolean uploadFile(String localFile, String targetFileName)使用 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();实现第四章 系统实现 4.1界面设计的实现4.1.1连接服务器单击连接若服务器名称、端口、用户名和密码对的前提下登录到指定的服务器上面,弹出“登录成功”对话框,并在下方状态栏中显示“登录成功。4.1.2获取文件列表 登录到服务器上面之后,获取在服务器用户的主文件及文件夹并在下方状态栏显示。4.1.3断开服务器当用户需要关闭连接时,单机“断开连接”就可断开与服务器的连接,在状态栏上显示“连接
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 热力公司工作总结
- 科组工作计划汇报
- 检察院项目汇报
- 护理心肌梗死业务查房
- 《美丽的桥》课件
- 电气行业售后部门年终总结
- 语文记叙文章讲解
- 血管性认知障碍的护理
- 糖尿病饮食护理专题课程
- 骶尾骨髓炎护理
- JTGT D 65-05-2015 公路悬索桥设计规范正式版
- 凤凰台上忆吹箫课件
- 全国农村饮水安全工程十一五规划
- 加油站安全生产标准化全套资料
- 椒花水库移民安置档案归档范围及保管期限表
- 马克思主义发展史课件
- GB/T 5780-2016六角头螺栓C级
- GB 1903.50-2020食品安全国家标准食品营养强化剂胆钙化醇(维生素D3)
- 横河DCS-培训讲义课件
- 部编版三年级下册语文全册课件【完整版】
- 初中数学几何1000题专项训练(含详解分析)-最新
评论
0/150
提交评论