我正在尝试使用apache发送手动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
这样做时它会工作,而当我手动发送命令时却不能工作呢?
发布于 2013-03-19 10:42:34
手动发送PASV
命令是不够的,客户端必须打开到服务器指定端口的数据连接,以响应PASV
命令。这是通过调用enterLocalPassiveMode()
方法来执行的。由于手动发送PASV
不初始化数据连接,所以在此之后不久就会出现错误。
有关FTP协议的详细信息,请参阅http://slacksite.com/other/ftp.html#passive。
https://stackoverflow.com/questions/15496606
复制相似问题