使用FTP命令下载带有套接字的文件

问题描述 投票:0回答:2

我使用的是专有编程语言,它没有内置的FTP函数。因此,我正在使用sockets

sHandle := SocketOpen('ftp.stackoverflow.net', 21);
SocketReadString(sHandle, answer);

retW := SocketWriteString(sHandle, 'user user1673665' & CHR(13) & CHR(10));
SocketReadString(sHandle, answer);
retW := SocketWriteString(sHandle, 'pass !@#$%^&*' & CHR(13) & CHR(10));
SocketReadString(sHandle, answer);

retW := SocketWriteString(sHandle, 'cwd update' & CHR(13) & CHR(10));
SocketReadString(sHandle, answer);
retW := SocketWriteString(sHandle, 'retr update.txt' & CHR(13) & CHR(10));
SocketReadString(sHandle, answer);

SocketClose(sHandle);

这些是我从FTP服务器收到的答案:

220-欢迎使用stackoverflow FTP 220未经授权的访问是非法的! 331user1673665所需的密码

230已登录

250 CWD成功。 “ / update”是当前目录。

但是为什么在retr update.txt之后出现此错误:

503错误的命令顺序。

我正在逐步调试代码。因此响应时间应该不是问题。

sockets download ftp command downloadfile
2个回答
2
投票

RETR命令必须至少在PASVPORT之前,以建立数据连接。

请咨询RFC 959,尤其是“ 3.2。建立数据连接”


还请注意,FTP命令应以大写形式发送。


1
投票

为什么retr update.txt不起作用?

因为您未遵循FTP协议的规范。数据传输是通过单独的TCP连接完成的,需要事先使用PASVEPSVPORTEPRT命令进行设置。有关更多信息,请参见标准(即它们的用途),即RFC 959RFC 2428

© www.soinside.com 2019 - 2024. All rights reserved.