0

我们一直在使用 apache commons net FTP 类使用代理连接到位于我们网络外部的 Sterling commerce FTP 网关以提取文件。我们不列出文件,因为我们知道要拉取的文件的名称,所以我们直接使用下面的方法拉取它。

boolean isTransferred = ftp.retrieveFile(remoteFileName, outputFile);

它自 3 年以来一直有效,自过去 2 周以来我们一直面临问题。错误发生在上面的行并且是

org.apache.commons.net.ftp.FTPConnectionClosedException:收到 FTP 响应 421。服务器关闭连接。org.apache.commons.net.ftp.FTP.__getReply(FTP.java:347) org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:450) org.apache.commons.net.ftp。 FTP.sendCommand(FTP.java:478) org.apache.commons.net.ftp.FTPClient。openDataConnection (FTPClient.java:476) org.apache.commons.net.ftp.FTPClient.retrieveFile(FTPClient.java:1228)

自过去 2 周以来,我们间歇性地面临这些问题,并且不确定其根本原因是什么。两边都没有改变。任何想法可能是什么问题?

谢谢,拉维

4

1 回答 1

4

FTPClient 默认使用“主动模式”,这是有问题的,因为它需要 FTP 客户端打开一个端口以供 FTP 服务器连接回来。使用被动模式应该可以避免这个问题。连接并登录后,在您的 FTP 代码中添加以下行。

FTPClient ftp = new FTPClient();
// connect and login code here
ftp.enterLocalPassiveMode();

这应该可以解决您的问题。

于 2010-05-18T23:49:22.320 回答