java - apache ftpclient 和 sun ftpclient 的区别

标签 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

最佳答案

似乎相关的区别是 sun.net.ftp.FtpClient 默认使用被动 (PASV) 模式,但 org.apache.commons .net.ftp.FTPClient 默认为 Activity 状态。

至少,这是我对相应源代码的阅读:

您应该能够通过运行来确认这一点:

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

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

关于java - apache ftpclient 和 sun ftpclient 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48093845/

相关文章:

Java 和 MS CRM 2016 Web API 更新

java - 如何从 Android 上的 ListView 中删除项目

java - JFileChooser "Save As"复合文档 - 覆盖现有

java - 无法准确跟踪视频的代码

Java apache fop 2.2 某些西里尔字符的错误呈现

java - 如何列出当前目录中的文件?

java - 如何在grails中进行外部url调用

java - 发出在 Java 中异步上传文件的 HTTP 请求的最简单方法是什么?

java - 从子类访问父类的私有(private)实例变量?

java - 合并 ArrayList 不重复