




已阅读5页,还剩70页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简易的FTP软件 目 录一、需求分析3 1.1用户需求3 1.2功能需求3 1.3 性能需求3二、概要设计3 2.1主要模块功能描述3 2.2整体结构模块图4 2.3流程图5三、详细设计5 3.1 界面模块实现5 3.2模块功能调用11 3.3功能函数编写及实现效果11四、调试分析14五、测试结果15六、课程设计总结20七、参考文献21八、附录21一、需求分析 1.1用户需求实现一个简易的FTP软件,要求实现FTP常用的功能,包括列文件目录,下载文件,上传文件,用户登录/注销等。1.2功能需求该系统主要包括:1.可视化的交互界面模块;2.连接服务器用户登录模块;3.浏览服务器/本地目录和文件模块;4.上传/下载文件模块;5.目录操作模块。1.3 性能需求整个系统操作应当简便,界面友好,运行稳定,执行速度快。系统本身运行对计算机硬件平台和操作系统平台要求适中。二、概要设计2.1主要模块功能描述本次课程设计的简易FTP软件需要具备一些基本功能模块,如连接、上传、 下载等,其中最主要的功能模块如下:1、下载功能模块:连接用户指定的FTP 服务器,获取服务器目录下的文件列表,当用户选择项目为文件时,点击下载可以下载用户所需要的文件。选定文件后提示用户将文件存储在何处,用户选择存储区后开始下载任务。依靠FTP 协议的支持,用户下载的文件没有类型和大小限制,即用户可已选择任何自己想要下载的文件,通过FTP 客户端进行下载。 2、上传功能模块:用户可以自行选择本机上存储的文件,上传至FTP 服务器。在用户选择存储在服务器的位置后,点击上传,选择所需要上传的文件,即可将文件上传至服务器。 3、连接功能模块:将用户本机与指定的IP 地址连接,验证用户命和密码,在FTP 服务器上进行注册。4、 目录操作模块:连接用户指定的FTP 服务器,可以创建或删除文件夹,也可以通过更改远程工作目录改变该用户的根目录。2.2整体结构模块图 系统主模块登录模块服务器目录浏览目录文件/文件夹操作模块服务器目录更改模块上传下载文件模块新新建文件夹删删除文件夹上上传文件下下载文件显显示目录客户在启动客户端程序后输入相应的登陆信息就能连接到服务器上,对服务器上的文件进行浏览、新建、删除、重命名、上传、下载文件等操作,通过断开结束与服务器的连接。2.3流程图开始输入登录信息:服务器地址、用户名、密码 连接浏览文件 新建文件 删除文件 更改目录 显示目录 上传 下载 断开 结束三、详细设计本次课程设计的界面显示通过mainframe类实现,所有界面相关定义、布局等以及各功能模块的调用都在mainframe类中编写。各功能定义及实现则在ftpfunction类中编写。3.1 界面模块实现由于各界面编写过程中代码太多并且源代码已在结尾附上,在此以登陆界面为例,以下是对登录界面按钮、输入框等的布局。登陆界面源代码: jLabel1.setText(jLabel1); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTabbedPane1.setBorder(javax.swing.BorderFactory.createEtchedBorder(); jLabel2.setText(用户名:); jLabel3.setText(密码:); jButton1.setText(登陆); jButton1.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) jButton1ActionPerformed(evt); ); jButton2.setText(连接服务器); jButton2.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) jButton2ActionPerformed(evt); ); jLabel6.setText(远处服务器地址:); jTextField5.setText(localhost); jTextField5.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) jTextField5ActionPerformed(evt); ); jLabel7.setText(端口号:); jTextField6.setText(21); jLabel8.setFont(new java.awt.Font(宋体, 1, 12); jLabel8.setForeground(new java.awt.Color(255, 0, 51); jLabel8.setText(注意:请先连接服务器再登陆); jButton6.setText(断开连接); jButton6.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) jButton6ActionPerformed(evt); ); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(117, 117, 117) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel2) .addComponent(jLabel3) .addGap(18, 18, 18) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(123, 123, 123) .addComponent(jLabel7) .addGap(18, 18, 18) .addComponent(jTextField6, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(55, 55, 55) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel8) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jLabel6) .addGap(37, 37, 37) .addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(94, 94, 94) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(193, 193, 193) .addComponent(jButton1) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(184, 184, 184) .addComponent(jButton2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 27, Short.MAX_VALUE) .addComponent(jButton6) .addGap(5, 5, 5) .addGap(119, 119, 119) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel8) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 11, Short.MAX_VALUE) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel6) .addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(28, 28, 28) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel7) .addComponent(jTextField6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(13, 13, 13) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButton2) .addComponent(jButton6) .addGap(18, 18, 18) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jButton1) .addGap(98, 98, 98) ); jTabbedPane1.addTab(登陆, jPanel1);用户登录界面显示如下图:3.2模块功能调用在mainframe类中定义的各按钮通过对ftpfunction类中的函数进行调用实现各自功能,以下是对各模块按钮在运行过程中调用函数的编写。由于按钮太多并且源代码已在结尾附上,在此以用户登录过程中的函数调用为例:在用户登录界面中通过调用FtpFunction类中的setUser、setPW、login三个函数实现用户的登录。private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) String user = jTextField1.getText().toString(); String pw = jTextField2.getText().toString(); FtpFunction.setUser(user); FtpFunction.setPW(pw); FtpFunction.login();3.3功能函数编写及实现效果在ftpfunction类中创建并定义了各个模块的功能函数,由于定义函数太多并且源代码已在结尾附上,在此以登陆时所需用到的login函数为例,以下为login函数的源代码: public void login() try if (connectSocket = null) JOptionPane.showConfirmDialog(null, 服务器尚未连接,请先连接!, 连接信息, JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE); return; sendCommand(USER + user); response = readLine(); if (!response.startsWith(331) cleanup(); JOptionPane.showConfirmDialog(null, 用户名或密码错误!, 连接信息, JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE); System.out.println(Error:用户名或密码错误! + response); System.out.println(response); return; sendCommand(PASS + passWord); response = readLine(); if (!response.startsWith(230) cleanup(); JOptionPane.showConfirmDialog(null, 用户名或密码错误!, 连接信息, JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE); System.out.println(Error:用户名或密码错误! + response); System.out.println(response); return; logined = true; JOptionPane.showConfirmDialog(null, 登陆成功!, 连接信息, JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE); cwd(remotePath); catch (Exception e) JOptionPane.showConfirmDialog(null, 登陆失败!, 登陆信息, JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE); 如果在服务器尚未连接的情况下登陆,则会显示如下界面:如果用户名或密码输入错误,则会显示如下界面:在连接服务器后,且用户名和密码都输入成功的情况下,会显示如下界面:四、调试分析此建议FTP软件在U-FTPsrv运行情况下作出测试,结果基本能够达到预期功能,满足用户的基本的登录服务器,上传下载数据的需求,并且在Windows平台上经测试能够稳定的运行。不足之处在于上传下载过程中无法得知过程进度、剩余时间等信息,对用户上传较大文件时会造成一定的不方便,能加入断点传输的话会更好。总的来说,测试内容较少,可能会存在一些BUG,与现实生活中大家使用的那些FTP下载软件有相当的距离。对此,还更应该的深入的学习Java语言中的那多重要的类库,更全面的了解他们的功能,争取完善其功能。 五、测试结果 输入服务器的IP地址,默认端口号为21,连接服务器:服务器连接成功后,输入用户名和登录密码:所登陆用户的详细信息:输入要上传的文件路径,点击上传进行上传:上传前该用户的文件夹:上传成功后该用户的文件夹:浏览服务器地址中该用户的工作目录:显示当前目录,显示在了框中,如下图:在当前目录中创建文件夹123,该用户工作目录的文件夹中出现名为123的文件夹,可见于下面截图的左下角:删除名为123的文件夹,该文件夹在用户的工作目录的文件夹中删除,同样可见于下面截图的左下角:改变该用户的工作目录,截图中为改为A为当前用户的工作目录,通过显示当前工作目录可以知道更改工作目录成功,也可以通过显示远程文件列表验证是否成功:输入所需下载的文件路径和下载后存放的路径进行下载:下图可见2.doc下载成功:通过断开连接可同时进行断开服务器连接和用户注销:六、课程设计总结通过翻阅书籍,在网上查阅资料,实践编程等一系列进程,一个简易的FTP客户端软件的设计与开发终于完成了,虽然功能上还有许多不足,但通过这些时间的钻研,从拟定方案,设计模块,解决开发过程中遇到的各种困难,最终实现了该文件传输系统的基本功能。实现了远程登录服务器、浏览本地与服务器目录文件和数据上传下载等功能需求,从而实现了一个简易的FTP客户端软件。通过自己实际设计并开发一个FTP客户端软件,使我了解了C/S开发模式和FTP的发展历史及工作原理,对FTP协议在网络中的结构和本身协议在传输的作用有了更深的认识。通过系统测试,我又了解了软件测试的理论知识,理解了测试的概念,了解了测试方法以及过程,虽然只是很有限的尝试和使用,但我尽量通过所学的知识从中寻找错误和不足,也对我今后做类似项目起到了积极的指导作用,总的说来此次课题我受益颇丰。遇到的问题是刚开始输入文件进行上传下载的格式总是不正确,导致一段时间的焦虑和止步不前,但通过查阅资料,对输入的格式有了更加清晰的认知,终于解决了这个问题。我们在遇到问题时,要积极查阅资料或者和老师同学进行探讨,对基础知识一定要掌握的非常牢靠,才能不出现一些小问题。 随着计算机网络的迅猛发展,计算机网络的应用日益广泛,并且已经渗透到生活的方方面面,对人们的生活起着不可忽视的作用。在这个信息化的社会中,了解网络是当代大学生必不可少的一门课程。尤其是对我们信息专业的学生,认识计算机网络的基本理论,以及其在生活中发挥的重大作用,为今后我们进一步深入学习专业课程,奠定了良好的基础。 科学技术日新月异蓬勃发展,从世纪年代初迅速发展起来的internet,已经飞速改变了人们的生活和工作。人们被其丰富无穷的信息资源、方便快捷的交流方式深深吸引。如今计算机网络的教育更是早已深入大学校园,尤其是对于我们信息管理与信息系统这个专业,网络是信息传播、资源共享的重要媒介,这门课程也是我们必不可少的一课。 随着计算机技术的迅猛发展,计算机的应用逐渐渗透到各个技术领域和整个社会的各个方面。社会的信息化、数据的分布处理、各种计算机资源的共享等各种应用要求都推动计算机技术朝着群体化方向发展,促使计算机技术与通信技术紧密结合。网络是计算机的一个群体,是由多台计算机组成的,这些计算机是通过一定的通信介质互连在一起的,计算机之间的互连是指它们彼此之间能够交换信息。计算机网络属于多机系统的范畴,是计算机和通信这两大现代技术相结合的产物,它代表着当前计算机体系结构发展的一个重要方向。 计算机网络技术的发展和普及日益改变着我们的学习和生活,各种各样的网络应用让我们眼花缭乱,因特网让我们真正体会到信息爆炸的威力。七、参考文献1 Herbert Schildt.Java实用教程M.北京:清华大学出版社,2005。2 胡月,叶曙光,徐饪.Jbuilder9入门与提高M.北京:科学出版社,2004。3 耿祥义,张跃平.JAVA2实用教程(第二版)M.北京:清华大学出版社,2004。4 杨树林,胡洁萍.JAVA语言最新实用案例教程M.北京:科学出版社,2006。5 W.Richard Stevens.TCP/IP详解 卷1:协议M.北京:机械工业出版社,2000。6 张晓明.计算机网络编程技术M.北京:中国铁道出版社,2009。八、附录 Mainframe类:import java.io.IOException;import java.util.ArrayList;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.JOptionPane;public class mainFrame extends javax.swing.JFrame ftpFunction FtpFunction = new ftpFunction(); /* Creates new form mainFrame */ public mainFrame() setTitle(ftp客户端); setLocation(250, 150); initComponents(); private void initComponents() jLabel1 = new javax.swing.JLabel(); jTabbedPane1 = new javax.swing.JTabbedPane(); jPanel1 = new javax.swing.JPanel(); jLabel2 = new javax.swing.JLabel(); jTextField1 = new javax.swing.JTextField(); jLabel3 = new javax.swing.JLabel(); jTextField2 = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jLabel6 = new javax.swing.JLabel(); jTextField5 = new javax.swing.JTextField(); jLabel7 = new javax.swing.JLabel(); jTextField6 = new javax.swing.JTextField(); jLabel8 = new javax.swing.JLabel(); jButton6 = new javax.swing.JButton(); jPanel2 = new javax.swing.JPanel(); jLabel4 = new javax.swing.JLabel(); jTextField3 = new javax.swing.JTextField(); jButton3 = new javax.swing.JButton(); jPanel3 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); jTextArea1 = new javax.swing.JTextArea(); jButton5 = new javax.swing.JButton(); jLabel11 = new javax.swing.JLabel(); jLabel12 = new javax.swing.JLabel(); jTextField9 = new javax.swing.JTextField(); jTextField10 = new javax.swing.JTextField(); jButton9 = new javax.swing.JButton(); jPanel4 = new javax.swing.JPanel(); jLabel5 = new javax.swing.JLabel(); jTextField4 = new javax.swing.JTextField(); jButton4 = new javax.swing.JButton(); jLabel9 = new javax.swing.JLabel(); jTextField7 = new javax.swing.JTextField(); jButton7 = new javax.swing.JButton(); jLabel10 = new javax.swing.JLabel(); jTextField8 = new javax.swing.JTextField(); jButton8 = new javax.swing.JButton(); jLabel13 = new javax.swing.JLabel(); jTextField11 = new javax.swing.JTextField(); jButton10 = new javax.swing.JButton(); jLabel1.setText(jLabel1); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTabbedPane1.setBorder(javax.swing.BorderFactory.createEtchedBorder(); jLabel2.setText(用户名:); jLabel3.setText(密码:); jButton1.setText(登陆); jButton1.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) jButton1ActionPerformed(evt); ); jButton2.setText(连接服务器); jButton2.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) jButton2ActionPerformed(evt); ); jLabel6.setText(远处服务器地址:); jTextField5.setText(localhost); jTextField5.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) jTextField5ActionPerformed(evt); ); jLabel7.setText(端口号:); jTextField6.setText(21); jLabel8.setFont(new java.awt.Font(宋体, 1, 12); jLabel8.setForeground(new java.awt.Color(255, 0, 51); jLabel8.setText(注意:请先连接服务器再登陆); jButton6.setText(断开连接); jButton6.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) jButton6ActionPerformed(evt); ); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 别墅装饰工程设计协议
- 如何做好幼儿的常规管理
- 水电站运行基础知识课件
- 个人诚信度持续提升承诺书6篇
- 员工培训课件制作技巧
- 中国传统节日中秋节班会情满中秋阖家团圆共享团圆中秋快乐
- 新质生产力押韵口号集锦
- 农业社区资源开发与共享合作协议
- 企业年度预算编制及执行情况报告模板
- 体育场馆运营管理及合作合同
- 生物安全培训试题(答案)
- 陪玩团基本知识培训课件
- 2025年司法考试真题及答案
- 2025四川蜀道建筑科技有限公司招聘16人考试参考试题及答案解析
- 芯片研发流程管理办法
- 电子工程师知识培训课件
- 浙江省中考科学说理题训练及答题技巧
- 兵团连队职工考试试题及答案解析
- 假如我变成了班主任课件
- 首尔之春影视解读
- 医院病区突然停电应急处置
评论
0/150
提交评论