当前位置: 首页 > 知识库问答 >
问题:

Apache Commons Net FTPClient将不执行listFiles()

鲁羽
2023-03-14

我正在修改以前使用我自己编写的FTPS库的一些代码。我被要求开始使用ApacheCommonsNet库(主要是FTPClient和FTPSClient),但我在列出文件清单时遇到了问题。我已经阅读了其他问题,但这不是enterLocalPassiveMode问题(Apache Commons Net FTPClient和listFiles()),因为我在连接之后,但在登录之前使用它。同样的代码在我设置的测试服务器(也使用ApacheFTP)上运行良好,但在我需要它的服务器上不起作用。

我还尝试使用“PBSZ 0”和“PROT P”命令,但它们没有在远程系统上实现。

502 PBSZ Command not implemented.
502 PROT Command not implemented.

代码

FTPSClient ftpsclient = new FTPSClient(true); // Implicit SSL
ftpsclient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true));
ftpsclient.connect(HOST_ADDR, HOST_PORT); // Using port 990
ftpsclient.enterLocalPassiveMode();
ftpsclient.user(USERID);
ftpsclient.pass(PASSWORD);
ftpsclient.setFileType(FTP.BINARY_FILE_TYPE);
ftpsclient.changeWorkingDirectory(REMOTE_DIR);
ftpsclient.printWorkingDirectory();
FTPFile[] ftpfiles = ftpsclient.listFiles(); // This is where it breaks

我已尝试显式指定目录并使用默认值:

FTPFile[] ftpfiles = ftpsclient.listFiles();
FTPFile[] ftpfiles = ftpsclient.listFiles(REMOTE_DIR);

... 但两者的结果相同。这是调试信息的输出:

220 FTPS (Version  Thu Dec 10 17:23:00 2015) server ready.
USER ****
331 Password required for ****.
PASS ****
230 User **** logged in.
TYPE I
200 Type set to I
CWD outbound/directory
250 CWD Command successful.
PWD
257 "/usr/path/to/outbound/directory" is current directory.
SYST
215 UNIX
PASV
227 Entering Passive Mode (XX,XX,XX,XX,24,140) ***Edit: port 6284
LIST
150 Opening data connection for '/bin/ls'.

然后它在30秒后超时,使用此堆栈跟踪:

Stack Trace: org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication.
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:317)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:294)
    at org.apache.commons.net.ftp.FTP.getReply(FTP.java:692)
    at org.apache.commons.net.ftp.FTPClient.completePendingCommand(FTPClient.java:1813)
    at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:3308)
    at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:3271)
    at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2930)

我已经检查了防火墙设置,允许该主机通过端口990和6200-6300进行连接。

我也读过FTPClient.list文件不工作和Java应用程序挂在列表命令到FTP服务器(Apache Commons FTPClient)期间,这些都没有帮助解决我的问题。

编辑:FTPClient似乎无法识别数据通道。我试图上传一个文件而不是列表,但在“150打开数据连接”消息后,它就消失了。我已经确认,从PASV命令分配给数据连接的端口没有被防火墙阻止。

有什么想法吗?

共有1个答案

鲜于玮
2023-03-14

我修好了。原来我在做一个目录列表,路径无效。Apache FTP没有返回错误消息,而是关闭了连接。不知道为什么。不管怎样,它现在起作用了。

 类似资料:
  • 最近,我将Cucumberinfo.cukes迁移到io.cucumber,将Junit4迁移到Junit5,因为执行不适用于我的java版本。 我的主页 我的Pom

  • 在我的测试中,自动化在两个移动设备上运行测试,并与testNG feamework并行。@BeforeClass和@AfterClass方法位于所有其他测试类继承的基类(超级)中。BeforeClass方法初始化驱动程序会话,AfterClass终止会话。 问题是@AfterClass没有执行。因此,驱动程序会话没有终止,随后对BeforeClass的调用也因此失败。这导致每个类中只执行第一个测试

  • 这没有任何区别,可执行路径保持不变。 我正尝试在Windows Server 2012 R2上执行此操作。

  • 问题内容: 在Java 块中,无论try / catch中发生了什么,通常都认为其中的代码可以“保证”运行。但是,我知道至少有两种情况 不会 执行: 如果被调用;要么, 如果异常一直抛出到JVM,并且发生默认行为(即退出) 是否有其他程序行为会阻止块中的代码执行?代码将在什么特定条件下执行或不执行? 编辑: 正如NullUserException所指出,第二种情况实际上是不正确的。我以为是因为标准

  • 问题内容: 我正在阅读《 使用Rails进行实用敏捷的Web开发》第4版 ,但我使用的是Rails 3.2.2而不是书中建议的3.0.5: 包括AJAX以便重新绘制购物车而不重新加载页面时,我陷入了困境。这是line_items_controller.rb中的创建动作: 这是我的RJS文件create.js.rjs(在app / views / line_items下): 但是,当我单击启动此操作

  • 我需要在我的服务器上运行函数 但是由于安全原因被禁用,但是PHP执行函数正在运行和。 是否可以使用php函数执行相同的操作? 禁用功能 链接,符号链接,执行,通过,proc_close,proc_get_status,proc_open,shell_exec,系统,流行,关闭