有没有办法判断 FTP 服务器在 Java 网络程序中是主动的还是被动的?

Is there a way to tell if the FTP server is active or passive in the Java web program?

我正在使用 Apache-Commons-Net 库。

我想知道 FTP 服务器是主动模式还是被动模式。

Apache-Commons-Net 库中是否有类似的方法?

(GetDataConnectionMode()是在Java中连接后告诉你连接模式的方法。之前想查一下Maud)

private FTPClient ftp;

// the code I want
if(active){
  ftp.enterLocalActiveMode();
}else{
  ftp.enterLocalPassiveMode();
}

// Apply active mode or passive mode to the environment of the server for oneself

正如@Erwin 已经评论的那样,服务器不处于主动或被动模式。服务器通常同时支持这两种模式。

您需要使用的模式,通常取决于您和服务器之间的网络配置,而不是服务器上的某些"switch"。几乎没有任何方法可以检测到这一点。

您所能做的就是尝试一种模式,如果第一种模式失败,则回退到另一种模式。一般来说,你应该从被动模式开始,因为它往往更有效。

另请阅读我关于 FTP connection modes 的文章以及它们所需的网络配置,以了解这是关于什么的。