如何通过FTP客户端进入FTP服务器的被动模式或主动模式

How to enter FTP server's passive mode or active mode through FTPClient

客户端首先进入被动模式,因为我不知道远程FTP服务器是主动模式还是被动模式。

一般先进入被动模式

代码如下:

FTPClient ftpClient = new FTPClient();
ftpClient.connect(ip,port);
ftpClient.login(id,pw);
ftpClient.enterLocalPassiveMode();
...
(occur mode error)
(I use try-catch in case an error occurs)
(active mode reconnect)
...
ftpClient.logout();
ftpClient.disconnect();
ftpClient.connect(ip,port);
ftpClient.login(id,pw);
ftpClient.enterLocalActiveMode();

我想听听像这样处理模式的正确方法。

我正在使用 FTP客户端 (Apache Commons Net)。

在主动模式下FTP服务器必须打开一个回到客户端的TCP连接;除非您的客户端直接在 Internet 上(没有防火墙或地址转发),否则活动模式将不起作用。

相比之下,被动模式 FTP 不会打开从服务器到客户端的 TCP 套接字,并且在两种情况下都可以使用(直接互联网连接和通过地址转发的互联网连接)。

大多数计算机都在防火墙后面并且使用地址转发,因此通常采用被动模式。