对于apache ftpclient和sun ftpclient的区别

时间:2018-01-04 11:03:05

标签: java

我尝试在我的应用程序中使用ftp客户端

第一个我使用org.apache.commons.net.ftp.FTPClient

但在linux服务器上运行时

可以登录ftp服务器,无法获取文件列表

返回消息是425无法建立连接。

如果关闭防火墙可以正常工作

好吧,我尝试更改为sun.net.ftp.FtpClient

发生了惊人的事情

我可以获得文件列表

两者都是主动模式,有谁知道为什么会有这样的差异?

FTPClient ftpClient = new FTPClient();
ftpClient.connect("host");
ftpClient.login("account", "password");
ftpClient.listFiles("path"); // can't work if you not open firewall

FtpClient ftp = FtpClient.create("host");
ftp.login("account", "password".toCharArray());
ftp.listFiles("path"); // even if you do not open the firewall can work

1 个答案:

答案 0 :(得分:1)

似乎相关的差异是sun.net.ftp.FtpClient默认使用被动(PASV)模式,但org.apache.commons.net.ftp.FTPClient默认为有效。

至少,这是我阅读各自的源代码:

您应该可以通过运行来确认:

FtpClient ftp = FtpClient.create("host");
ftp.login("account", "password".toCharArray());
ftp.enablePassiveMode(false);
ftp.listFiles("path"); 

您应该能够在Apache FTP客户端上使用PASV模式(也称为本地被动模式);请参阅javadocs