2

我正在尝试使用 apache commons 发送手动 FTP 命令,因为我必须将非标准 FTP 命令发送到特定服务器(接受它们)

在我尝试发送这些非标准命令之前,我想让 FTP 与 commons.net.ftp 一起手动工作。不幸的是,我似乎遗漏了一些东西。

这很好用(即它检索文件列表)

FTPClient ftp = new FTPClient();
FTPClientConfig config = new FTPClientConfig();
ftp.configure(config);

ftp.connect("ftp.mozilla.org");
ftp.login("anonymous", "");

ftp.enterLocalPassiveMode();
FTPFile[] fileList = ftp.listFiles("/");

这不

FTPClient ftp = new FTPClient();
FTPClientConfig config = new FTPClientConfig();
ftp.configure(config);

ftp.connect("ftp.mozilla.org");
ftp.login("anonymous", "");

ftp.sendCommand("PASV");
ftp.sendCommand("NLST");

我得到了适当的回应,ftp.sendCommand("PASV");但它ftp.sendCommand("NLST");最终给了我超时

425 Failed to establish connection.

我曾尝试研究该主题,但有关此错误的大多数建议是针对设置服务器的人(通常是防火墙问题)。

为什么它在什么时候起作用net.ftp,但在我手动发送命令时不起作用?

4

1 回答 1

0

手动发送PASV命令是不够的,客户端必须打开数据连接到服务器指定的端口以响应PASV命令。这是通过调用enterLocalPassiveMode()方法来执行的。由于PASV手动发送不会初始化数据连接,因此您很快就会收到错误消息。

有关 FTP 协议的更多详细信息,请参阅http://slacksite.com/other/ftp.html#passive

于 2013-03-19T10:42:34.777 回答