Java语言实现简单FTP软件------>FTP协议分析(一)

简介: FTP(File Transfer Protocol)就是文件传输协议。通过FTP客户端从远程FTP服务器上拷贝文件到本地计算机称为下载,将本地计算机上的文件复制到远程FTP服务器上称为上传,上传和下载是FTP最常用的两个功能。


FTP(File Transfer Protocol)就是文件传输协议。通过FTP客户端从远程FTP服务器上拷贝文件到本地计算机称为下载,将本地计算机上的文件复制到远程FTP服务器上称为上传,上传和下载是FTP最常用的两个功能。FTP使用传输层的TCP协议进行传输,因此客户端与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证。FTP的目标有以下目标: 

  1.  提高文件的共享性
  2. 提供非直接地远程操纵计算机 
  3. 避免用户因主机之间的文件存储系统的差异而导致的变化
  4. 为数据的传送提供可靠性和高效性

FTP协议模型如下图所示


FTP使用TCP的服务,它需要两条连接。一条是数据连接用于数据传送,一般使用端口21,而另一条是控制连接用于传送控制信息(命令和响应),一般使用端口20。控制连接需要传送的只是控制信息,如一行命令或一行应答码,而数据连接需要传送的数据类型繁杂,如文本文件、图形文件、应用程序等等。

FTP协议模型中使用到的交互元素包括用户接口、USERPIUPTPSPISDTP的说明如下图所示



FTP传输有两种方式:文本传输模式和二进制数据传输模式。其中文本模式又叫ASCII模式,二进制模式又叫Binary模式。

FTP服务分为普通FTP与匿名FTP服务两种类型。


常用FTP的命令有:

1) 接入命令
 USER: 指明用户名
PASS: 指明与用户名对应的密码
 ABOR:  异常中断数据连接程序
 QUIT: 从系统注销
 REIN: 重新初始化
2) 文件管理命令
 CWD:   改变服务器上的工作目录到指定目录
 CDUP:  改变服务器上的工作目录到父目录
 DELE: 请求删除服务器上的文件。
 LIST: 列出子目录或文件
 MKD: 请求在服务器上新建一个目录
 PWD:  显示当前工作目录
 RMD:  从服务器上删除指定目录
3) 数据格式化命令
 TYPE:  定义文件类型,共有四种类型,所带参数也有四种:A、E 、I 、L分别对应ASCIIEBCDICIMAGBLOCAL类型。
 STRU: 定义数据的组织
 MODE: 定义传输方式
4) 端口定义命令
 PASV:服务器选择端口,客户端使用这个端口发送主动打开
 PORT: 客户端选择端口,服务器使用这个端口创建主动打开
5) 文件传送命令
 RETR: 读取文件,文件从服务器端传送到客户端
 STOR: 存放文件,文件从客户端传送到服务器端
 STAT: 返回文件的状态
 ALLOO: 在服务器为文件分配存储空间
6) 杂项命令
 HELP: 询问服务器的信息
 NOOP: 检查服务器是否工作
 SITE: 指定特定场所的命令

 SYST: 询问服务器使用的操作系统


客户端发送 FTP 命令后,服务器返回响应码。响应码用三位数字编码表示:


第一个数字定义命令的状态。

1 表示服务器正确接收信息,还未处理。

表示服务器已经正确处理信息。

表示服务器正确接收信息,正在处理。

表示信息暂时错误。

表示信息永久错误。

 

第二个数字是响应类型的分类。

表示语法。

表示系统状态和信息。

表示连接状态。

表示与用户认证有关的信息。

表示未指明。

表示与文件系统有关的信息。


第三个数字提供了更加附加信息。 


==================================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址http://blog.csdn.net/ouyang_peng/article/details/9633781

===================================================================================================


相关文章
|
3月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
136 4
|
3月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
292 18
|
3月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
238 0
|
3月前
|
存储 Java Go
【Java】(3)8种基本数据类型的分析、数据类型转换规则、转义字符的列举
牢记类型转换规则在脑海中将编译和运行两个阶段分开,这是两个不同的阶段,不要弄混!
229 2
|
4月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
4月前
|
存储 Java Apache
Java语言操作INI配置文件策略
以上步骤展示了基本策略,在实际项目中可能需要根据具体需求进行调整优化。例如,在多线程环境中操作同一份配置时需要考虑线程安全问题;大型项目可能还需考虑性能问题等等。
206 15
|
5月前
|
安全 Java 编译器
new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析
逃逸分析是一种静态程序分析技术,用于判断对象的可见性与生命周期。它帮助即时编译器优化内存使用、降低同步开销。根据对象是否逃逸出方法或线程,分析结果分为未逃逸、方法逃逸和线程逃逸三种。基于分析结果,编译器可进行同步锁消除、标量替换和栈上分配等优化,从而提升程序性能。尽管逃逸分析计算复杂度较高,但其在热点代码中的应用为Java虚拟机带来了显著的优化效果。
177 4
|
5月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
467 0
|
5月前
|
机器学习/深度学习 安全 Java
Java 大视界 -- Java 大数据在智能金融反洗钱监测与交易异常分析中的应用(224)
本文探讨 Java 大数据在智能金融反洗钱监测与交易异常分析中的应用,介绍其在数据处理、机器学习建模、实战案例及安全隐私等方面的技术方案与挑战,展现 Java 在金融风控中的强大能力。
|
5月前
|
JSON Java API
【干货满满】分享拼多多API接口到手价,用Java语言实现
本方案基于 Java 实现调用拼多多开放平台商品详情 API,通过联盟接口获取商品到手价(含拼团折扣与优惠券),包含签名生成、HTTP 请求及响应解析逻辑,适用于电商比价、导购系统集成。