为什么Apache-Commons-Net的FTPClient有时会对PORT命令中的端口号进行错误的计算?这是处于活动模式。例如它可以发送FTPClient
PORT <some>,<ip>,<address>,<here>,235,181
实际上使用的端口号是60340.这个错误计算的原因是什么?
这可能发生在3.3版本上。
我知道ftpClient.enterLocalPassiveMode();
可以解决这个问题,但我想知道活动模式无法正常工作的部分。
答案 0 :(得分:0)
根据您的评论,我认为您将FTP控制连接误认为是数据连接。
我假设60340是FTP控制连接的本地端口。打开数据连接时,会分配60341(因此为PORT ...,235,181
)。
推理:在FTP活动模式下,客户端打开预期数据连接的侦听端口,然后通过现有控制连接通过PORT
命令向服务器报告。如果服务器无法连接到该端口,则无法通过该端口访问TCP / IP数据包。当您声称两台机器仍然在端口60340&#34;进行通信时,它必须是控制连接。如果连接失败,则无法在端口上进行任何通信(&#34;无法打开数据连接&#34;)。
&#34;无法打开数据连接的真正原因&#34;错误可能是您在防火墙后面,因此服务器无法连接回客户端。现在有什么共同之处。这就是被动模式的好处。