《计算机通信网络》课程项目

终期报告

题 目: FTP协议实现
组 号: 第7组
任课教师: 王瑞
FT
2019年03月01日

FTP协议实现
一.项目介绍
文件传输协议(File Transfer Protocol, FTP)是重要的应用层协议,用于Internet上控制文件的双向传输。FTP允许用户连接一台远程计算机,查看该计算机上的文件,复制文件至本地计算机以及从本地计算机上传文件至该远程计算机。
二.项目要求
文件传输协议(File Transfer Protocol, FTP)是重要的应用层协议,用于Internet上控制文件的双向传输。FTP允许用户连接一台远程计算机,查看该计算机上的文件,复制文件至本地计算机以及从本地计算机上传文件至该远程计算机。设计要求:通过编程实现FTP服务器和客户端功能,具体要求如下:1.Windows 环境下运行;2.支持文件和文件夹的上传和下载;3.支持多用户、多线程并发下载;4.设计界面,在界面上显示当前程序的运行状态。评分依据:1.原代码是否可运行;2.文档是否完备,清晰;3.文档与程序代码是否一致;4.程序容错性,健壮性;5.界面清晰、美观。

三.原理概述

原理分为两个部分:Java网络套接字设计和ftp传输协议。
(一)java网络套接字:网络套接字的定义
TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)或插口。套接字用(IP地址:端口号)表示。它是网络通信过程中端点的抽象表示,包含进行网络通信必需的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
(二).FTP简介
TCP/IP协议中,FT标准命令TCP端口号为21,Port方式数据端口为20。FTP协议的任务是从一台计算机传送到另一台计算机,它与这两台计算机所处的位置、连结的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并能访问internet,你可以用ftp命令来传输文件。每种操作系统使用上有些细微差别,但是每种协议基本的命令结构是相同的。
ftp的传输有两种方式:ASCII传输方式和二进制传输方式。
(1).ASCII传输方式
假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。
(2)二进制传输方式
在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到windows上,在对方系统,此文件无法执行。
总的来说,当你知道两台机器是同一系统的话,二进制方式最好。
(三)ftp的工作方式
工作方式有两种:一种是Standard(Port主动方式),另一种Passive(PASV被动方式)。Standard方式ftp客户端发送Port命令到ftp服务器。Passive方式ftp客户端发送PASV命令到ftp Server。
(四)工作原理
Port模式ftp客户端首先和ftp服务器的TCP21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送Port命令。Port命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的tcp 20 端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。
Passive模式在建立通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。ftp服务器在收到pasv命令之后,随机打开一个临时端口(自由端口,大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接ftp服务器将通过这个端口进行数据的传送,这时候ftp server不再需要建立一个新的和客户端的连接。

四.项目设计
1.设计思路
程序流程
总体协议
我们使用主动模式,下载命令使用ASCII模式,上传使用二进制模式,关于命令的实现使用java工厂模式进行设计
ftp命令与ftp响应
USER 检测用户是否存在 相应响应: 331 请输入密码 501 用户非法
PASS 登录命令 相应响应:230用户+用户名+登录 530 密码错误
LIST 获取ftp目录里的文件列表 相应响应:210 文件目录不存在
150 打开数据端口传输目录
226 目录传输结束
MYPORT 收到Port命令时的处理 相应响应:220 向我们的port和ip和端口
QUIT 退出命令 相应响应:221 再见
RETR 下载 相应响应:150 打开ascii模式。。。。。。
220 下载完成
220 该文件不存在
STOR 上传 相应响应:150 二进制数据连接
226 上传完成
2.主要设计流程
我们使用网络套接字进行设计
1.客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,源端口为随机端口x,在客户端,远程端口为21,在服务器。
2.客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。
3.服务器打开20号源端口并且建立和客户端数据端口的连接。此时,源端口为20,远程数据端口为(x+1)。
4.客户端通过本地的数据端口建立一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经建立好了一个连接。
5.对于用户的设置我们使用了java的jdom包利用xml文件对用户进行配置
利用好java的输入输出文件流对数据进行导入和写出

四.核心程序

五.项目成果展示
1.服务器端

服务器开始运行
2.客户端

3.登录之后
下载

4.上传

5.用户配置

六.收获与建议

在本次项目中了解了网络编程的基本方式,对网络套接字和ftp传输协议有了一定的认识,在设计ftp协议的相应和回复的时候,遇到了大量的问题,比如使用了重复的回应,收到应答之后没有动作等等。并且对于java的awt和swing的GUI设计有了一定的认识,虽然此次我所设计的界面并不美观,但是能用,感到很开心。除了这些,还学习了一系列的jar包,比如jdom并且学习了xml文件的编写,感触良多。除此之外,学习了java的工厂模式设计,对以后的java设计很有帮助。总之,感觉这次项目收益良多。对于我们的程序,我们还有许多要改进的地方,比如ui界面不够美观,实现功能较少等等。在今后的学习中我定会对此加以改进。

F

FTP服务器和客户端相关推荐

  1. Linux FTP服务器与客户端(FTP命令 C/C++代码实现)

    FTP 是 TCP/IP 提供的标准互联网协议,用于将文件从一台主机传输到另一台主机.它主要用于将网页文件从其创建者传输到充当 Internet 上其他计算机的服务器的计算机.它还用于将文件从其他服务 ...

  2. windows ftp服务器_ftp客户端软件,推荐6个流行的FTP客户端软件

    无论你是做网站工作,还是运行一个家庭FTP服务器,或者你只是喜欢高速下载,一个稳定且功能齐全的FTP客户端工具都可以节省你大量时间和生命,现在有大量的免费或者收费的FTP客户端软件供大家选择,这里总结 ...

  3. Python实现FTP服务器和客户端

    基础知识 FTP只通过TCP连接,FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口). 通常21端口是命令端口,20端口是数据端口.当混入主动/被动模式的概念时, ...

  4. Android中FTP服务器、客户端搭建以及SwiFTP、ftp4j介绍

    本文主要内容: 1.FTP服务端部署---- 基于Android中SwiFTP开源软件介绍: 2.FTP客户端部署 --- 基于ftp4j开源jar包的客户端开发 : 3.使用步骤 --- 如何测试我 ...

  5. Linux ftp服务器和客户端解析

    文章目录 ftp术语 是什么 工作方式 用户授权 传输模式 ftp服务器 ftpd vsftpd 安装 文件结构 运行方式 vsftpd配置文件 chroot 账号登录 限制 欢迎信息 虚拟路径 ft ...

  6. 简单的ftp服务器(客户端、服务器端、socket)

    查看本机IP地址: 127.0.0.1 服务器功能: 可以获取服务器文件使用get指令 可以展示服务器有哪些文件使用ls指令 进入服务器某个文件夹使用指令cd+文件夹名称 上传本地文件到服务器,使用指 ...

  7. FTP服务器和客户端源代码编写问题(ftp server client source)

    最近关注FTP程序源代码的朋友非常多,这里简单说明一下. 其实FTP也就是普通的Socket程序,只是需要按照FTP协议(RFC959, 1635?可能我记错了)去做,也就是每个消息有固定的结构的,比 ...

  8. Centos 7使用vsftpd搭建FTP服务器

    FTP,即:文件传输协议(File Transfer Protocol),基于客户端/服务器模式,默认使用20.21端口号,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端 ...

  9. 鸟哥的Linux私房菜(服务器)- 第二十一章、文件服务器之三: FTP 服务器

    第二十一章.文件服务器之三: FTP 服务器 最近更新日期:2011/08/08 FTP (File Transfer Protocol) 可说是最古老的协议之一了,主要是用来进行档案的传输,尤其是大 ...

最新文章

  1. FlexiBO:基于成本感知的深度神经网络多目标优化
  2. 阿里巴巴创新研究计划AIR2018正式发布 邀全球学者共创未来
  3. Android 开发笔记“关闭默认键盘”
  4. 在驱动和应用程序间共享内存
  5. 跟我学ModelArts丨探索ModelArts平台个性化联邦学习API
  6. android service 样例(电话录音和获取系统当前时间)
  7. 产教融合,共塑未来”,CIE 2018 中国 IT 教育博鳌论坛盛大落幕
  8. Windows 7系统mac地址修改攻略
  9. python爬虫-8个最高效的Python爬虫框架,你用过几个?
  10. java计算机毕业设计民宿运营管理网站源码+mysql数据库+系统+lw文档+部署
  11. win7桌面运行html,win7系统多桌面切换的解决方案
  12. 本地计算机无法启动dhcp服务,Windows10无法启用dhcp服务怎么办?
  13. python中plot函数参数_Python的 plot函数和绘图参数设置
  14. 基于android的短信收发,android 短信接收短信 与发送短信源码
  15. 支付宝即时到账之给二维码设置超时失效时间
  16. STM32F4单片机读取光电编码器的小理解
  17. php imap 安装_php7安装imap扩展
  18. 小白MacBook超级实战教程——装双系统WIN10
  19. 微信小程序_16,组件的生命周期
  20. 正在与python恋爱

热门文章

  1. 物联网感知——视频监控技术
  2. wireshark 抓 蓝牙数据_使用Wireshark 抓取数据包
  3. WebView加载页面出现白屏解决方案
  4. ACM--DFS--最大碉堡数--HDOJ 1045--Fire Net
  5. 改变 Office 的版本
  6. UE网络-官方联网和多人游戏
  7. Educoder计算机数据表示实验(HUST)第1关:汉字国标码转区位码实验
  8. Linux查看pcie槽位
  9. 任正非谈“狼文化”:华为没有 996,更没有 007
  10. pip手把手安装pytorch,保姆级教学