FTP课程设计报告.doc_第1页
FTP课程设计报告.doc_第2页
FTP课程设计报告.doc_第3页
FTP课程设计报告.doc_第4页
FTP课程设计报告.doc_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计课程名称_计算机网络 题目名称_文件传输协议的简单设计与实现学生学院_自动化学院 专业班级_10级网络信息工程4班学 号_3110001493 学生姓名_刘立业 指导教师_刘洪涛 2012年12月28日摘要文件传送是各种计算机网络都实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问。本设计是基于Eclipse平台下使用Java实现的FTP文件传输。实现基本的文件传输操作。建立客户端和服务器、客户端基于TCP Socket进行数据传输,采用多线程进行数据传输。没有采用Java里面的FTPClient类来实现文件传输,而是采用套接字来实现。而且在实现过程中采用抽象数据类型进行规划,体验一个软件开发过程的具体实现步骤。关键字:Java网络编程 FTP文件传输 文件上传下载 文件操作 目录一、 实验目的4二、 实验内容和要求41、实验内容42、具体要求4三、 实验主要仪器设备和材料4四、 基本原理51.FTP系统模型52. 系统功能设计52.1总体设计5基本功能:Client Server界面设计 ;上传文件;下载文件;查看服务器的根目录;更改目录。52.2系统实现5五、 实现的算法、数据结构61.客户端的抽象数据类型61.1FTPClient用户界面61.2FTPClient控制连接线程71.3FTPClient数据连接线程72. 服务器的抽象数据类型72.1 FTPServer的控制连接72.2FTPServer的数据连接73. 文件操作8六、 实现结构流程图8另附图8七、 具体实现步骤81. FTPClient用户界面的实现82. FTPClient控制连接的实现103. FTPClient数据传输连接的实现103.1下载文件操作103.2上传文件操作113.3显示服务器的路径113.4,.进入服务器更改路径114. FTPServer控制连接的实现115. FTPServer数据传输线程的实现125.1读取本地文件下载给客户端125.2接收客户端的上传的文件125.3获取服务器本地系统路径125.4更改路径12八、 测试结果13九、 课程设计心得14十、 参考文献14十一、 附录源程序15一、 实验目的文件传送是各种计算机网络都实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是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 的相应命令,有余力的同学可以多实现几个命令。最后,写出实验报告。三、 实验主要仪器设备和材料联网计算机 Eclipse 4.2 JDK1.7帮助文档四、 基本原理1.FTP系统模型FTP是Internet上传文件的应用层协议。FTP规定数据包的格式、数据包头部结构和命令结构等等。FTP应用TCP传输而不用UDP。由FTP提供的文件传输将一个完整的文件从一个系统复杂然后通过TCP套接字发送传输个另一个系统中。一方为服务器。一方为客户端。FTP建立两个TCP连接,一个用于数据传输,一个用于传输命令。每一个FTP主机都有一个“协议解析器”模块。FTP以纯文本形式发送,其响应同样也是纯文本形式。在进行文件传输时,FTP的客户端和服务器之间要建立两个并行的TCP连接:“控制连接”和“数据连接”。控制连接在整个连接回话的期间一直保持打开状态。当FTP客户端通过控制连接发送请求,并告诉服务器自己的数据连接的端口号(2493),服务器通过控制连接(2121)接收到请求信息,然后,创建数据连接(2020)进程进行连接客户端的端口。由于FTP采用两个不同的端口,所以数据连接和控制连接不会混乱。原理图看图1客户端服务器控制进程数据传输进程控制进程用户界面数据传输进程 FTP采用两个TCP进行连接 图12. 系统功能设计2.1总体设计基本功能:Client Server界面设计 ;上传文件;下载文件;查看服务器的根目录;更改目录。2.2系统实现系统功能实现:FTPServer开启创建一个ServerSocket建立控制连接端口号2493 进行实况监听访问。FTPClient开启,启动用户界面,提示使用说明,用户输入想实现的操作Code 和Information,然后FTPClient开启控制连接的子线程访问PTPServer的2493端口进行控制连接,并新建数据连接线程DataTransPro。服务器接收到FTPClient的请求和相关信息,进行启动数据连接,等待客户端的数据连接。完成相应请求后。服务器关闭套接字,关闭数据连接线程。进入监听状态。五、 实现的算法、数据结构1.客户端的抽象数据类型ADT Client数据对象:控制线程Socket数据传输线程Socket()数据关系:控制线程程 控制 数据传输线程程基本操作:UserInterface();/用户界面ClientControlPro();/控制进程ClientDataTransPro();/数据传输进程1.1FTPClient用户界面ADT Client -UserInterface()showUserMsg();/用户提示信息Switch(code)Case “h”:/帮助信息Break;Case “get”:/获取一个文件ClientDataTransPro(“get”,finleName)Break;Case “put”:/发送一个文件DataTransPro(put,fileName);Break;Case “dir”:/列出远方当前目录DataTransPro(“dir”);Case “pwd”:/显示远主当前目录!DataTransPro(dir);Case “cd”:/更改当前目录DataTransPro(cd,dirName);Case “quit”:/退出系统1.2FTPClient控制连接线程ADT Client- ControlPro extended ThreadCode ;/用户输入的命令controlDataTransPro();/控制数据连接进程的函数connectServer();/连接服务器回话的函数1.3FTPClient数据连接线程ADTClient- DataTransPro extended ThreadControl ;/控制命令FileRecvFormSer();/接收文件操作FileSendToSer();/发送文件操作showSerDir();/显示目录信息changeSerDir();/更改文件路径2. 服务器的抽象数据类型ADT Server数据对象:控制线程Socket(21)数据传输线程Socket(20)数据关系:控制线程程 控制 数据传输线程程基本操作:ServerControlPro();/控制进程ServerDataTransPro();/数据传输进程2.1 FTPServer的控制连接ADT Server-DataTransProControl ;/控制命令FileRecvFormClient();/接收文件从客户端操作FileSendToClient();/发送文件给服客户端操作ChangeFileDir();/更改文件的存放目录GetDirToClient();/获取指定文件的目录GetFileNameToClient();/获取主机目录下的所有文件名2.2FTPServer的数据连接ADT Server-ControlPro extender ThreadSwitch(request)Case “get”:/发送一个文件个客户端DataTransPro(“get”,fileName)Break;Case “put”:/发送一个文件DataTransPro(“put”,fileName);Break;Case “dir”:/列出当前目录DataTransPro(“dir”);Case “pwd”:/显示当前目录!DataTransPro(pwd);Case “cd”:/更改当前目录DataTransPro(cd);3. 文件操作ADT FileOperator 数据对象:FileOutputStream ,FileInputStream socket.getInputStream socket.getOutputStream基本操作:private void fileRecvFormSer() /接收文件操作private void fileSendToSer();/发送文件操作六、 实现结构流程图另附图1图2七、 具体实现步骤1. FTPClient用户界面的实现1.1用户显示界面System.out.println(n-欢迎使用Java版 FTP客户端-);System.out.print(请输入要执行的功能操作:);System.out.println(-完成当前操作!谢谢使用Java版 FTP客户端-);1.2获取用户输入命令的实现输入获取要操作的指令:BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in);operating = bufferedReader.readLine().toString();输入获取要进行的指令附加信息:private static String getChangeDir();/获取用户要进行操作的目录名private static String getFileName();/获取用户输入要进行操作的文件名1.3根据用户的指令操作进行跳转try switch (operating) case h:System.out.println(使用说明书!n);showUsingBook();break;case get:/获取要下载的文件名String getFileNmae = getFileName();new ClientControlPro(operating, getFileNmae);/控制连接break;case put:System.out.println(开始操作传给服务器一个文件功能!);String putFileNmae = getFileName();new ClientControlPro(operating, putFileNmae);break;case dir:System.out.println(开始操作列出远方当前路径功能!);new ClientControlPro(operating, dir);break;case pwd:System.out.println(开始操作显示远主当前目录功能!);new ClientControlPro(operating, pwd);break;case -cd:System.out.println(开始操作改变远方当前目录文件功能!);/获取要更改文件的新路径String cdFileDirName = getChangeDir();new ClientControlPro(operating, cdFileDirName);break;case quit:System.out.println(正在退出程序!);System.exit(0);break;default:break; catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();System.out.println(客户端启动失败!);2. FTPClient控制连接的实现控制连接线程的实现时通过在用户输入相应的order后进行新建线程,然后根据命令启动跟服务器控制线程连接进行通信。此外并且启动数据传输线程访问服务器的数据传输线程。2.1连接服务器的控制连接线程访问服务器的2493端口。通过发送控制指令和指令信息给服务器的控制连接线程。private void contrConnectServerControlPro()Socket socket = new Socket(InetAddress.getByName(null), 2493);OutputStream osToSer = socket.getOutputStream();InputStream isFromSer = socket.getInputStream();sToSer.write(userCode.getBytes();/发送信息给服务器osToSer.write(stringInfo.getBytes();/接收服务器发来的数据nt len = isFromSer.read(recvbuf);/关闭所有输入输出流和套接字osToSer.close();isFromSer.close();socket.close();2.2启动数据传输线程并且传输控制指令和信息。new ClientDataTransPro(userCode, stringInfo);3. FTPClient数据传输连接的实现采用在ClientDataTransPro数据传输连接的构造函数里,根据控制连接线程的控制指令进行Switch调用响应的函数,而在函数里面进行访问服务器的数据连接线程的端口2020。3.1下载文件操作先进套接字访问服务器数据传输线程:Socket socket = new Socket(InetAddress.getByName(null), 2020);建立输入输出流进行数据通信:OutputStream outputStream = socket.getOutputStream();InputStream inputStream = socket.getInputStream();根据control进行相应调用函数读写数据操作,新建文件进行保存下载的数据。当前版本的是固定保存名称,而可以优化为根据用户输入名称保存文件名。然后就进行接收下载数据到缓存再读入文件中。代码如下:File file_out=new File(downloadfile);FileOutputStream os=new FileOutputStream(file_out);byte bytes=new byte1024;while (c=inputStream.read(bytes)!=-1) os.write(bytes,0,c);/关闭流和套接字os.close(); outputStream.close();inputStream.close(); socket.close();3.2上传文件操作先进套接字访问服务器数据传输线程和输入输出流的实现:Socket socket = new Socket(InetAddress.getByName(null), 2020);OutputStream outputStream = socket.getOutputStream();InputStream inputStream = socket.getInputStream();根据用户选择的文件路径进行读取本地文件到缓存中然后发送给服务器的数据传输线程。具体如下:File file_in=new File(filename);FileInputStream is=new FileInputStream(file_in);byte bytes=new byte1024;while (c=is.read(bytes)!=-1)outputStream.write(bytes,0,c);3.3显示服务器的路径显示服务器的系统路径顾名思义是访问数据数据传输线程进行接收数据显示:socket = new Socket(InetAddress.getByName(null), 2020);OutputStream outputStream = socket.getOutputStream();InputStream inputStream = socket.getInputStream();缓存接收数据,然后进行显示服务器的路径:byte recvbuf = new byte1024;int len = inputStream.read(recvbuf);System.out.println(new String(recvbuf, 0, len);3.4,.进入服务器更改路径同理显示服务器的路径一样,将用户输入的新路径名发送给服务器,然后等待接收发来的数据显示出来即可。outputStream.write(cd_path);/发送要更改的路径。4. FTPServer控制连接的实现4.1服务器的2493端口控制连接线程一直在启动监听客户端的访问使用while循环语句,采用serversocket.accept()进行循环监听客户端的请求。并且统计请求的次数。serverSocket = new ServerSocket(2493);/学号后三位加+2000while(true)System.out.println(监听到客户端请求第+i+个!n);/控制线程Socket s = serverSocket.accept();/创建一个监听客户请求的套接字i+;4.2接收到客户端的控制指令启动新的数据传输线程当控制连接线程监听到客户端的请求,然后就启动数据传输线程,并且将控制指令和控制信息下传给数据传输线程。数据传输线程根据相应的控制命令进行操作。New ControlProListener(s);5. FTPServer数据传输线程的实现5.1读取本地文件下载给客户端File file_in=new File(fileName); FileInputStream fileInputStream = new FileInputStream(file_in);byte bytes=new byte1024; int c; while (c=fileInputStream.read(bytes)!=-1) os.write(bytes,0,c); os.close();fileInputStream.close();5.2接收客户端的上传的文件File file_out=new File(uploadfile);FileOutputStream os;try os = new FileOutputStream(file_out);byte bytes=new byte1024;int c;while (c=inputStream.read(bytes)!=-1) s.write(bytes,0,c);5.3获取服务器本地系统路径String stringDir = System.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论