ftp文件传输协议课程设计报告大学毕业设计论文Word下载.docx
- 文档编号:19672826
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:26
- 大小:154.02KB
ftp文件传输协议课程设计报告大学毕业设计论文Word下载.docx
《ftp文件传输协议课程设计报告大学毕业设计论文Word下载.docx》由会员分享,可在线阅读,更多相关《ftp文件传输协议课程设计报告大学毕业设计论文Word下载.docx(26页珍藏版)》请在冰豆网上搜索。
1.3FTPClient数据连接线程7
2.服务器的抽象数据类型8
2.1FTPServer的控制连接线程8
2.2FTPServer的数据连接线程9
七、具体的一些方法实现
9
1.FTPClient用户界面10
2.FTPClient控制连接10
3.FTPClient数据传输12
4.FTPServer控制连接14
5.FTPServer数据传输14
八、测试结果
客户端结果...............................................................................................................................................................16
服务端结果16
九、课程设计心得17
十、参考文献18
一、实验目的
文件传送是各种计算机网络都实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。
本实验的目的是,学会利用已有网络环境设计并实现简单应用层协议,掌握TCP/IP网络应用程序基本的设计方法和实现技巧。
二、实验内容和要求
1、实验内容
我们的计算机网络实验环境建立在TCP/IP网络体系结构之上。
各计算机除了安装TCP/IP软件外,还安装了TCP/IP开发系统。
实验室各计算机具备Windows环境中套接字socket的编程接口功能,可为用户提供全网范围的进程通信功能。
本实验要求学生利用这些功能,设计和实现一个简单的文件传送协议。
2、具体要求
用socket编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),该程序应能实现下述命令功能:
get:
取远方的一个文件
put:
传给远方一个文件
pwd:
显示远主当前目录
dir:
列出远方当前目录
cd:
改变远方当前目录
?
:
显示你提供的命令
quit:
退出返回
这此命令的具体工作方式(指给出结果的形式)可以参照FTP的相应命令,有余力的同学可以多实现几个命令。
最后,写出实验报告。
三、实验主要仪器设备和材料
联网计算机EclipseJDK1.7帮助文档
四、基本原理
1.FTP系统模型
FTP是Internet上传文件的应用层协议。
FTP规定数据包的格式、数据包头部结构和命令结构等等。
FTP应用TCP传输而不用UDP。
由FTP提供的文件传输将一个完整的文件从一个系统复杂然后通过TCP套接字发送传输个另一个系统中。
一方为服务器。
一方为客户端。
FTP建立两个TCP连接,一个用于数据传输,一个用于传输命令。
每一个FTP主机都有一个“协议解析器”模块。
FTP以纯文本形式发送,其响应同样也是纯文本形式。
在进行文件传输时,FTP的客户端和服务器之间要建立两个并行的TCP连接:
“控制连接”和“数据连接”。
控制连接在整个连接回话的期间一直保持打开状态。
当FTP客户端通过控制连接发送请求,并告诉服务器自己的数据连接的动态端口号(randomPort),服务器通过控制连接(2554)接收到请求信息,然后,创建数据连接(randomPort)进程进行连接客户端的数据传输端口。
由于FTP采用两个不同的端口,所以数据连接和控制连接不会混乱。
原理图看图1
FTP采用两个TCP进行连接
图1
2.系统功能设计
2.1总体设计
基本功能:
ClientServer界面设计;
输入要连的远程主机服务器IP,上传任意格式的文件;
下载任意格式文件(能实现断点续传);
查看服务器的根目录;
列出服务器当前文件夹目录,更改服务器当前文件夹目录再列出,
支持多客户同时数据访问服务器(通过控制层给传输层分配动态端口实现)。
2.2系统实现
系统功能实现:
FTPServer启动控制连接线程ServerControlPro创建一个ServerSocket端口号为2554进行实况监听访问。
FTPClient开启,启动用户界面菜单,输入IP后,弹出选择提示菜单,用户输入想实现的操作operating(get,put,dir,pwd,-cd)和相应其它信息(文件路径),然后FTPClient开启控制连接的线程ClientControlPro访问FTPServer的2554端口进行控制连接,并启动了数据连接线程ClientTransPro。
服务器接收到FTPClient的请求和相关信息,进行启动数据连接ServerTransPro,监听客户端的数据连接。
完成相应请求后。
服务器关闭套接字,关闭数据连接线程。
进入监听状态。
5、实现结构流程图
六、整体实现的逻辑、数据结构
1.客户端的抽象数据类型
ADTClient
{
数据对象:
控制线程数据传输线程
数据关系:
控制线程控制数据传输线程
三个类:
ClassUserInterface;
//用户界面
ClassClientControlPro;
//控制进程
ClassClientDataTransPro;
//数据传输进程
}
1.1FTPClient用户界面
ADTClient-UserInterface()
publicstaticvoidmain(String[]args)
{
System.out.println("
请输入服务器ip地址"
);
serverIP=input.next();
optionmenu();
}
staticvoidoptionmenu()
{
欢迎来到FTP文件管理客户端"
-------------------------------"
请输入具体操作(hgetputdirpwd-cdquit)"
Stringoperating=input.next();
try
{
switch(operating)
{
case"
h"
:
System.out.println("
使用说明书!
\n"
showUsingBook();
break;
get"
//获取要下载的文件名
StringgetFileNmae=getFileName();
String[]a=getFileNmae.split("
\\."
2);
houzui=a[1];
下载中---------"
newClientControlPro(operating,getFileNmae,serverIP,houzui).start();
//控制连接
put"
StringputFileNmae=putFileName();
发送中----------"
newClientControlPro(operating,putFileNmae,serverIP,houzui).start();
dir"
开始操作列出远方当前目录功能!
"
newClientControlPro(operating,"
serverIP,houzui).start();
pwd"
开始操作显示远主当前路径功能!
-cd"
开始操作改变远方当前目录文件功能!
//获取要更改文件的新路径
StringcdFileDirName=getChangeDir();
newClientControlPro(operating,cdFileDirName,serverIP,houzui).start();
quit"
正在退出程序!
System.exit(0);
default:
}
}optionmenu();
catch(Exceptione1)
e1.printStackTrace();
System.out.println("
客户端启动失败!
}
1.2FTPClient控制连接线程
publicclassClientControlProextendsThread
StringuserCode="
;
//传输给服务器的一窜控制信息
Stringoperating;
StringgetFilename;
StringserverIP;
Stringhouzui;
longposition;
intrandomPort;
publicClientControlPro(Stringoperating,StringgetFilename,StringserverIP,Stringhouzui){...}
publicvoidrun()
randomPort=newRandom().nextInt(65535);
//生成随机端口
userCode=operating+"
+randomPort+"
+"
+position+"
+getFilename;
//利用"
通过正则表达式拆分3个字符窜
sendMessage();
//发送控制信息并启动传输端线程
sendMessage(){...}
1.3FTPClient数据连接线程
ClientTransProextendedThread{
...
publicClientTransPro(Stringoperating,StringgetFilename,StringserverIP,
Stringhouzui,intrandomPort,longposition)
{...}
switch(operating)
case"
download();
break;
upload(getFilename);
show();
dir();
default:
2.服务器的抽象数据类型
ADTServer{
控制线程Socket(2554)数据传输线程Socket(randomPort)
控制线程控制数据传输线程
ServerInterface//服务器入口
ServerControlPro//控制进程
ServerDataTransPro//数据传输进程
2.1FTPServer的控制连接
publicclassServerControlProextendsThread{
......
ServerSocketserverSocket;
serverSocket=newServerSocket(2554);
//学号后三位加+2000
while(true)
监听到客户端请求第"
+i+"
个!
//控制线程
Sockets=serverSocket.accept();
//创建一个监听客户请求的套接字
i++;
getClientMessage(s);
//接收客户端传来的控制信息并启动传输端线程
getClientMessage(s){...};
}
2.2FTPServer的数据连接
publicclassServerDataTransProextendsThread
{
Stringoperating="
StringgetFilename="
StringrandomPort="
Socketsocket;
intserverRandomPort;
publicServerDataTransPro(Stringoperating,StringrandomPort,StringgetFilename)
this.operating=operating;
this.getFilename=getFilename;
this.randomPort=randomPort;
publicvoidrun()
ServerSocketserverSocket=null;
serverRandomPort=newInteger(randomPort);
serverSocket=newServerSocket(serverRandomPort);
booleanisflag=true;
while(isflag)
socket=serverSocket.accept();
有客户端"
+socket.toString()+"
连接本服务数据传输端"
if(socket!
=null)
{
switch(operating)
{
case"
System.out.println("
控制端的操作是get"
download();
isflag=false;
break;
控制端的操作是put"
put(socket);
控制端的操作是pwd"
pwd();
控制端的操作是dir"
dir();
控制端的操作是-cd"
cd();
default:
}
}
isflag=false;
serverSocket.close();
}catch(IOExceptione)
e.printStackTrace();
七、具体的一些方法实现
1.FTPClient控制连接的sendMessage()方法,访问服务器的2554端口,发送控制指令和指令信息给服务器的控制连接线程,并启动了自己的传输线程。
privatevoidsendMessage()//发送信息给服务器控制端
ClientTransProctp=newClientTransPro(operating,getFilename,serverIP,houzui,randomPort,position);
Socketsocket;
socket=newSocket(serverIP,2554);
OutputStreamosToSer=socket.getOutputStream();
InputStreamisFromSer=socket.getInputStream();
osToSer.write(userCode.getBytes());
osToSer.close();
isFromSer.close();
socket.close();
ctp.start();
}catch(UnknownHostExceptione)
2.FTPClient数据传输各操作方法实现
privatevoiddir()//列出文件夹目录
Socketsocket=newSocket(serverIP,randomPort);
//动态端口randomPort
InputStreaminputStream=socket.getInputStream();
//缓存接收数据,然后进行显示服务器的路径:
byte[]recvbuf=newbyte[1024];
intlen;
while((len=inputStream.read(recvbuf))!
=-1)
len=inputStream.read(recvbuf);
Stringstr=newString(recvbuf);
String[]dir=str.split("
"
for(inti=0;
i<
dir.length;
i++)
System.out.println(dir[i]);
inputStream.close();
publicvoiddownload()
//下载文件操作
//先进套接字访问服务器数据传输线程:
socket=newSocket(serverIP,randomPort);
//建立输入输出流进行数据通信:
RandomAccessFilefile_out=newRandomAccessFile("
downloadfile."
+houzui,"
rw"
//创建从中读取和向其中写入(可选)的随机访问文件流
intpos=(int)position;
file_out.seek(pos);
//即定位到要开始下载的字节位置
byte[]bytes=newbyte[10240];
while((c=inputStream.read(bytes))!
file_out.write(bytes,0,c);
//关闭流和套接字
file_out.close();
}catch(UnknownHostExceptione1)
}catch(IOExceptione1)
publicvoidupload(Stringfilename)
/*
*上传文件操作先进套接字访问服务器数据传输线程和输入输出流的实现:
*/
InputStreaminputStream=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ftp 文件传输 协议 课程设计 报告 大学 毕业设计 论文