Kor*_*gay 5 java apache ftp ftps apache-commons-net
我正在尝试连接到 FTPS 服务器。我可以很好地连接 FileZilla 并列出服务器中的文件、下载等。
我正在尝试使用 org.apache.commons.net.ftp 包中的 FTPSClient 使用 Java 连接到此 FTP 服务器。这就是我正在尝试的方式:
FTPSClient ftp = new FTPSClient();
ftp.connect(HOST, 7021);
ftp.enterLocalPassiveMode();
ftp.login(USERNAME, PASSWORD);
final int list = ftp.list();
System.out.println("List returned: " + list);
Run Code Online (Sandbox Code Playgroud)
我得到的回应是:
FTPSClient ftp = new FTPSClient();
ftp.connect(HOST, 7021);
ftp.enterLocalPassiveMode();
ftp.login(USERNAME, PASSWORD);
final int list = ftp.list();
System.out.println("List returned: " + list);
Run Code Online (Sandbox Code Playgroud)
根据维基百科,425 的意思是:“无法打开数据连接”。
但是,尝试创建一个文件夹效果很好:
FTPSClient ftp = new FTPSClient();
ftp.connect(HOST, 7021);
ftp.enterLocalPassiveMode();
ftp.login(USERNAME, PASSWORD);
ftp.mkd("/laylaylom");
Run Code Online (Sandbox Code Playgroud)
因此,如果我运行此代码并连接 FileZilla,我将在 FTP 服务器中看到文件夹“laylaylom”。
我也尝试过:
FTPSClient ftp = new FTPSClient();
ftp.connect(HOST, 7021);
ftp.login(USERNAME, PASSWORD);
final int pasv = ftp.sendCommand("PASV");
System.out.println("pasv is: " + pasv);
final int list = ftp.list();
System.out.println("List returned: " + list);
Run Code Online (Sandbox Code Playgroud)
输出将是:
List returned: 425
Run Code Online (Sandbox Code Playgroud)
其中 227 是:“进入被动模式(h1,h2,h3,h4,p1,p2)。” 维基百科页面中没有列出 552,我不确定它代表什么。
我怎样才能list()
工作?
编辑#1
在 Martin Prikryl 回答之后我尝试了这个:
FTPSClient ftp = new FTPSClient();
ftp.connect(HOST, 7021);
ftp.enterLocalPassiveMode();
ftp.login(USERNAME, PASSWORD);
final FTPFile[] ftpFiles = ftp.mlistDir("/");
System.out.println(ftpFiles.length);
Run Code Online (Sandbox Code Playgroud)
返回 0..
编辑 #2 WinSCP 日志:
FTPSClient ftp = new FTPSClient();
ftp.connect(HOST, 7021);
ftp.enterLocalPassiveMode();
ftp.login(USERNAME, PASSWORD);
ftp.mkd("/laylaylom");
Run Code Online (Sandbox Code Playgroud)
这个FTP.list
方法太低级了。它甚至不打开数据连接。它只是发送LIST
命令。您不能单独使用它。正如其文档所述:
一种向服务器发送 FTP LIST 命令、接收回复并返回回复代码的便捷方法。 请记住,由您来管理数据连接。如果您不需要这种低级别的访问权限,请使用
FTPClient
,它将为您处理所有低级别的详细信息。
相反,使用一些高级方法,例如:
FTPClient.mlistDir
(推荐,如果服务器支持)或FTPClient.listFiles
。并保持您的第一种方法,即调用FTPClient.enterLocalPassiveMode()
.
PASV
仅通过向服务器发送命令无法切换到被动模式。您还必须切换客户端。否则客户端和服务器将无法相互通信。
将FTPClient.enterLocalPassiveMode
客户端和服务器都切换到被动模式。
当您使用 FTPS 时,您还需要启用加密数据传输。请注意,Apache Common Net 库默认情况下不加密数据传输。
ftp.execPBSZ(0);
ftp.execPROT("P").
Run Code Online (Sandbox Code Playgroud)
实际上,如果控制连接已加密,某些服务器(特别是您的服务器)甚至会要求您加密数据传输。
归档时间: |
|
查看次数: |
3005 次 |
最近记录: |