计算机网络课设实验报告FTP.docx
- 文档编号:8648181
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:50
- 大小:448.26KB
计算机网络课设实验报告FTP.docx
《计算机网络课设实验报告FTP.docx》由会员分享,可在线阅读,更多相关《计算机网络课设实验报告FTP.docx(50页珍藏版)》请在冰豆网上搜索。
计算机网络课设实验报告FTP
简易的FTP软件
一、需求分析
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(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
jButton1ActionPerformed(evt);
}
});
jButton2.setText("连接服务器");
jButton2.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
jButton2ActionPerformed(evt);
}
});
jLabel6.setText("远处服务器地址:
");
jTextField5.setText("localhost");
jTextField5.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
jTextField5ActionPerformed(evt);
}
});
jLabel7.setText("端口号:
");
jTextField6.setText("21");
jLabel8.setFont(newjava.awt.Font("宋体",1,12));
jLabel8.setForeground(newjava.awt.Color(255,0,51));
jLabel8.setText("注意:
请先连接服务器再登陆");
jButton6.setText("断开连接");
jButton6.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
jButton6ActionPerformed(evt);
}
});
javax.swing.GroupLayoutjPanel1Layout=newjavax.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三个函数实现用户的登录。
privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt)
{
Stringuser=jTextField1.getText().toString();
Stringpw=jTextField2.getText().toString();
FtpFunction.setUser(user);
FtpFunction.setPW(pw);
FtpFunction.login();
}
3.3功能函数编写及实现效果
在ftpfunction类中创建并定义了各个模块的功能函数,由于定义函数太多并且源代码已在结尾附上,在此以登陆时所需用到的login函数为例,以下为login函数的源代码:
publicvoidlogin(){
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(Exceptione){
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协议在网络中的结构和本身协议在传输的作用有了更深的认识。
通过系统测试,我又了解了软件测试的理论知识,理解了测试的概念,了解了测试方法以及过程,虽然只是很有限的尝试和使用,但我尽量通过所学的知识从中寻找错误和不足,也对我今后做类似项目起到了积极的指导作用,总的说来此次课题我受益颇丰。
遇到的问题是刚开始输入文件进行上传下载的格式总是不正确,导致一段时间的焦虑和止步不前,但通过查阅资料,对输入的格式有了更加清晰的认知,终于解决了这个问题。
我们在遇到问题时,要积极查阅资料或者和老师同学进行探讨,对基础知识一定要掌握的非常牢靠,才能不出现一些小问题。
随着计算机网络的迅猛发展,计算机网络的应用日益广泛,并且已经渗透到生活的方方面面,对人们的生活起着不可忽视的作用。
在这个信息化的社会中,了解网络是当代大学生必不可少的一门课程。
尤其是对我们信息专业的学生,认识计算机网络的基本理论,以及其在生活中发挥的重大作用,为今后我们进一步深入学习专业课程,奠定了良好的基础。
科学技术日新月异蓬勃发展,从20世纪90年代初迅速发展起来的internet,已经飞速改变了人们的生活和工作。
人们被其丰富无穷的信息资源、方便快捷的交流方式深深吸引。
如今计算机网络的教育更是早已深入大学校园,尤其是对于我们信息管理与信息系统这个专业,网络是信息传播、资源共享的重要媒介,这门课程也是我们必不可少的一课。
随着计算机技术的迅猛发展,计算机的应用逐渐渗透到各个技术领域和整个社会的各个方面。
社会的信息化、数据的分布处理、各种计算机资源的共享等各种应用要求都推动计算机技术朝着群体化方向发展,促使计算机技术与通信技术紧密结合。
网络是计算机的一个群体,是由多台计算机组成的,这些计算机是通过一定的通信介质互连在一起的,计算机之间的互连是指它们彼此之间能够交换信息。
计算机网络属于多机系统的范畴,是计算机和通信这两大现代技术相结合的产物,它代表着当前计算机体系结构发展的一个重要方向。
计算机网络技术的发展和普及日益改变着我们的学习和生活,各种各样的网络应用让我们眼花缭乱,因特网让我们真正体会到信息爆炸的威力。
七、参考文献
[1]HerbertSchildt.Java实用教程[M].北京:
清华大学出版社,2005。
[2]胡月,叶曙光,徐饪.Jbuilder9入门与提高[M].北京:
科学出版社,2004。
[3]耿祥义,张跃平.JAVA2实用教程(第二版)[M].北京:
清华大学出版社,2004。
[4]杨树林,胡洁萍.JAVA语言最新实用案例教程[M].北京:
科学出版社,2006。
[5]W.RichardStevens.TCP/IP详解卷1:
协议[M].北京:
机械工业出版社,2000。
[6]张晓
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 实验 报告 FTP