FTP学习的一些笔记

FTP大约在2011年下半年接触的,这个笔记也是当时记录的,一晃差不多4年过去了,如今又有项目安排做这个,事是人非,冥冥之中又会有新意思么?

找出当年写的笔记,权当记念。
1、每个FTP命令(包括应答信息),以“\r\n”结尾。
2、当connect成功后,就可以读取FTP服务器的欢迎信息。如:

1
2
3
4
char tmp[100];
int ret;
ret = Receive(tmp, sizeof(tmp), 10);
tmp[ret] = '\0';

字符串形式:

1
220 Welcome to blah FTP service, I am Late Lee ^_^."\r\n"\0

3、PASV模式应答信息:

1
227 Entering Passive Mode (172,18,222,100,18,255)."\r\n"\0

其中18*256 + 255是数据端口号。
4、ACTIVE模式命令:
客户端发送:PORT 192,168,18,188,N,M
服务器返回:200 PORT Command successful.
其中客户端需要产生大于1024的端口NUM = N*256 + M
5、CWD CDUP 命令返回两条响应信息,要注意!–>正确说法是多行响应信息

1
2
3
250-Disk free space at this directory is 455,099,184 KB.
250 CWD command successful
(在dos下ftp工具测试结果)

6、数据传输有两条通道,一为命令(21端口),另一为数据通道(由PASV命令返回结果得到端口号)。
需要进入数据传输的有以下命令:
上传:STO STOU APPE
下载:RETR LIST NLST connet返回两次响应信息:

1
2
3
4
5
6
7
8
227 Entering Passive Mode (172,18,222,100,10,181).
150 Opening BINARY mode data connection for 1234.dat (RETR命令此处有文件大小信息)

send/receive data

closesocket返回一次:

226 Transfer complete.

上面所述者均为另建一socket进行数据传输,每次完成需要关闭,即使这成为整体(create connect send/receive close)。
7、重命名:
RNFR
返回信息:
出错:550 foo.dat No such file or directory
成功:350 File or directory exists, ready for destination name.
RNTO
返回信息:
出错:503 Bad sequence of commands
成功:250 Rename successful
李迟 5.6半夜