我们一直在使用apache commons net FTP类来使用代理连接到位于我们网络外部的Sterling商务FTP网关来提取文件。我们不列出文件,因为我们知道要提取的文件的名称,所以我们使用下面的方法直接提取它。
boolean isTransferred = ftp.retrieveFile(remoteFileName,outputFile);
自3年以来一直在运作,自过去两周以来我们一直面临着问题。错误发生在上面的行,是
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)
自从过去两周以来,我们间歇性地面对这些问题,并且不确定它可能是什么原因。任何一方都没有改变。任何想法可能是什么问题?
谢谢, 拉维
答案 0 :(得分:3)
FTPClient默认使用“活动模式”,这是有问题的,因为它需要FTP客户端打开FTP服务器连接回来的端口。使用被动模式应该避免这个问题。连接并登录后,在FTP代码中添加以下行。
FTPClient ftp = new FTPClient();
// connect and login code here
ftp.enterLocalPassiveMode();
这可以解决您的问题。