Ftp 服务是最常用的网络服务之一,虽然在 www 风行的今天,Ftp 已经远不如以前使用得
广泛,但是在许多大学等科研单位,Ftp 仍然是最常用的文件交换式。
构建一个 Ftp 服务器要比构建一个 Ftp 客户端来得简单,因为服务器不需要复杂的图形界
面。相比传统的 C/C++,使用 Java 的多线程和网络编程能令我们更轻易地开发出稳定可
靠的 Ftp 服务器。
Ftp 协议简介
File Transfer Protocol,文件传输协议,顾名思义,Ftp 就是用于文件的传输,Ftp 协议
是基于 TCP 协议的,因此,在一个 Ftp 会话开始前,客户端和服务器必须首先建立一个
TCP 连接,这个 TCP 连接通常被称作控制连接,客户端通过此连接向服务器发送 FTP 命
令,服务器处理命令后,将返回一个响应码。
每个命令必须有最少一个响应,如果是多个,要易于区别。FTP 响应由三个数字构
成,后面是一些文本。数字带有足够的信息,客户端程序不用知道后面的文本就知道发生
了什么。文本信息与服务器相关,不同的用户,不同的服务器可能有不同的文本信息。文
本和数字以空格间隔,文本后以换行符()结束。如果文本多于一行,第一行内要有信
息表示这是多行文本,最后一行也要标记为结束行。比如客户端发送获取当前目录的命令
“PWD”,服务器的响应可能是:
200 /pub/incoming
响应码的三位数字都有明确的含义:
1xx 确定预备应答,这类响应用于说明命令被接受,但请求的操作正在被初始化 ,
在进入下一个命令前等待另外的应答。
2xx 确定完成应答,要求的操作已经完成,可以执行新命令。
3xx 确定中间应答,命令已接受,但要求的操作被停止。
4xx 暂时拒绝完成应答,未接受命令,但错误是临时的,过一会儿可以再次发送
消息,比如服务器忙。
5yz 永远拒绝完成应答,此类响应码一般表示错误,如拒绝登陆。
第二位数字代表的意义:
x0x 格式错误;
x1x 此类应答是为了请求信息的;
x2x 此类应答是关于控制和数据连接的;
x3x 关于认证和帐户登录过程;
x4x 未使用;
x5x 此类应答是关于文件系统的;
常见的相应有:
200 命令执行成功;
202 命令未实现;
230 用户登录;
331 用户名正确,需要口令;
450 请求的文件操作未执行;
500 命令不可识别
502 命令未实现
一个 Ftp 会话过程中,始终有一个控制连接,如果客户端请求文件,则会有一个数
据连接,但 FTP 协议规定:只要关闭了控制连接,数据连接(如果有)也必须关闭。
不同的 FTP 服务器对 FTP 命令的支持程度可能不同,但是 TCP 标准定义了所有