gpt4 book ai didi

java - apache ftpclient 和 sun ftpclient 的区别

转载 作者:行者123 更新时间:2023-12-02 11:47:40 25 4
gpt4 key购买 nike

我尝试在我的应用程序中使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com