解决FTPClient不能访问文件的问题150 Opening ASCII mode data connection

xiaoxiao2021-02-28  43

问题描述

我使用的FTPClient:import org.apache.commons.net.ftp.FTPClient;

java中下载FTP文件,但是

FTP登录成功,FTPClient访问文件,却卡住。

代码(伪代码):

boolean res = f.login();

FTPFile[] list = f.ftp.listFiles("/");

打印日志:

220 Serv-U FTP Server v6.4 for WinSock ready... USER zhhzhx 331 User name okay, need password. PASS Its.info 230 User logged in, proceed. 登陆成功 SYST 215 UNIX Type: L8 PORT 192,168,1,106,213,244 200 PORT Command successful. LIST / 150 Opening ASCII mode data connection for /bin/ls.

解决思路

FTP是有两种数据连接模式的,主动模式和被动模式。

PORT(主动)方式:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。

PASV(被动)方式的连接过程是: 客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。

ftp默认为port主动模式,如果客户端pc所在网络有防火墙,则ftp server在数据传输时,就不能连接到client。

解决方法

修改为被动方式。

java中修改:ftp.enterLocalPassiveMode();

FTP工具,一般都可以在选项里面找到。

转载请注明原文地址: https://www.6miu.com/read-1310462.html

最新回复(0)