Java ftp4j - 在 amn 主动模式下连接时列出 FTP 服务器中的文件
Java ftp4j - List files in FTP server when connecting in amn active mode
我正在使用 ftp4j 库来实现我的 FTP 客户端,但是我尝试连接的服务器仅在活动模式下接受连接。
所以当我尝试列出远程文件时,我得到:
ERROR : Error in Connecting to Remote Machine... Hence exitting...
it.sauronsoftware.ftp4j.FTPException [code=501, message= Server cannot accept argument.]
at it.sauronsoftware.ftp4j.FTPClient.openActiveDataTransferChannel(FTPClient.java:3600)
at it.sauronsoftware.ftp4j.FTPClient.openDataTransferChannel(FTPClient.java:3551)
at it.sauronsoftware.ftp4j.FTPClient.listNames(FTPClient.java:2335)
at com.npap.network.TranferFileFtp4j.listRemoteFilesFtp1(TranferFileFtp4j.java:999)
代码如下:
...
//connect to server method - in active mode!
ftpClient = Ftp4jUtility.connect1(SERVER_MACHINE, PORT, SERVER_USERNAME, SERVER_PASSWORD);
try {
ftpClient.changeDirectory(config.getFtpRemoteFolderReports());
log.info("Changed directory to: " + config.getFtpRemoteFolderReports());
} catch (FTPException | FTPIllegalReplyException | IOException | IllegalStateException e) {
e.printStackTrace();
}
String[] filesList = ftpClient.listNames();
for(String f: filesList) {
log.info("fetched file: " + f);
tmpAllRemoteFiles.add(f);
}
在活动模式下连接时有什么方法可以列出远程文件?
是的,您可以在活动模式下使用.listNames()
。
问题很可能是服务器无法连接回您的客户端以打开数据连接。您必须在本地防火墙(如果有)上打开来自 FTP 数据连接范围的端口,并在 NAT 上路由传入连接(如果有)。
配置主动模式FTP比较麻烦,很少用到。
学习(我的)关于必需的文章 network configuration in respect to FTP active mode。
501 错误代码来自 FTP 服务器(可能是 IIS)。你会发现很多类似的问题,如果你 google for "501 Server cannot accept argument".
您的代码没有任何问题。要么是网络配置问题,要么是服务端问题
我正在使用 ftp4j 库来实现我的 FTP 客户端,但是我尝试连接的服务器仅在活动模式下接受连接。
所以当我尝试列出远程文件时,我得到:
ERROR : Error in Connecting to Remote Machine... Hence exitting...
it.sauronsoftware.ftp4j.FTPException [code=501, message= Server cannot accept argument.]
at it.sauronsoftware.ftp4j.FTPClient.openActiveDataTransferChannel(FTPClient.java:3600)
at it.sauronsoftware.ftp4j.FTPClient.openDataTransferChannel(FTPClient.java:3551)
at it.sauronsoftware.ftp4j.FTPClient.listNames(FTPClient.java:2335)
at com.npap.network.TranferFileFtp4j.listRemoteFilesFtp1(TranferFileFtp4j.java:999)
代码如下:
...
//connect to server method - in active mode!
ftpClient = Ftp4jUtility.connect1(SERVER_MACHINE, PORT, SERVER_USERNAME, SERVER_PASSWORD);
try {
ftpClient.changeDirectory(config.getFtpRemoteFolderReports());
log.info("Changed directory to: " + config.getFtpRemoteFolderReports());
} catch (FTPException | FTPIllegalReplyException | IOException | IllegalStateException e) {
e.printStackTrace();
}
String[] filesList = ftpClient.listNames();
for(String f: filesList) {
log.info("fetched file: " + f);
tmpAllRemoteFiles.add(f);
}
在活动模式下连接时有什么方法可以列出远程文件?
是的,您可以在活动模式下使用.listNames()
。
问题很可能是服务器无法连接回您的客户端以打开数据连接。您必须在本地防火墙(如果有)上打开来自 FTP 数据连接范围的端口,并在 NAT 上路由传入连接(如果有)。
配置主动模式FTP比较麻烦,很少用到。
学习(我的)关于必需的文章 network configuration in respect to FTP active mode。
501 错误代码来自 FTP 服务器(可能是 IIS)。你会发现很多类似的问题,如果你 google for "501 Server cannot accept argument".
您的代码没有任何问题。要么是网络配置问题,要么是服务端问题