本节我们掌握FTP协议的数据包格式,为编码实现奠定基础。我们先看看控制命令的格式。当用户端通过控制命令通道想服务器端发送数据后,服务器端一定会产生回复。回复主要有三个目的,首先是让客户端确定服务端收到了消息,其次是通知客户端请求是否能被接收,第三通知客户端当前服务器的状态。
数据包格式的组成特点是数字与文本信息相混合。服务器返回给客户端的数据包中一定包含回复码,该数值用来通知客户端数据包的格式和内容。不同的服务器在回复的数据包中,同样目的的数据包回复码一定相同,但是字符串内容可能会有所不同,因此对数据包的解读必须根据回复码进行。回复码包含三位数值,每个数字对应不同意义,对于回复码“xyz",第一位数字是x,第二位是y,第三位是z,下面我们依次看他们对应的含有。
第一位数字x表示客户发送的命令是否能成功执行,他的意义对应如下表:
回复码 | 含义 | 描述 |
---|---|---|
1yz | 命令被接受并执行第一步 | 用户发送的命令需要执行多个不再,1表示当前请求正在被执行,用户需要等待服务器后续回复 |
2yz | 命令被接受且成功执行 | 用户发送的请求已经被服务器完全执行 |
3yz | 命令被接受并且正在执行过程中 | 客户端发送命令收到,但执行被推迟,例如客户端发起验证请求,同时发送给服务器用户名但密码还没有发过去时服务器就会返回此回复码 |
4yz | 命令暂时被拒绝 | 客户端发送的命令不能被执行,但是客户端在稍后可以再次发送该命令进行尝试,例如服务器过忙时会返回该命令码,客户端就可以延迟一段 |