本质上,我的防火墙存在问题,导致我的应用程序在尝试使用 FTP 存储文件时挂起。
我发现这与我的防火墙允许通过端口访问有关。
我将连接端口设置为 21(我相信这也是默认值),然后设置
ftp.enterLocalPassiveMode();
我试图允许通过防火墙上的端口 21 进行访问,但它不起作用。
我注意到如果我尝试登录
ftp.getPassivePort();
这将是每个上传项目的随机端口,通常在 30k-50k 范围内。
我的应用程序确实允许“主动”模式,但由于这是一个将被许多用户使用的应用程序,因此“被动”似乎更受欢迎,但用户可能会遇到与我相同的错误。
所以我唯一能想到的是
以某种方式允许我的防火墙上的范围**(我没有看到范围的选项,因为其他值都是单端口)**
找到某种方式来使用单个被动端口,如果这是它正在经历的事情(似乎是这种情况)
不要使用被动模式。似乎很多帖子都推荐被动,但我不确定为什么它是完全需要的,为什么不首选主动?
根据http://wiki.apache.org/commons/Net/FrequentlyAskedQuestions
您可以调用 FTPClient.enterLocalPassiveMode() 来启用被动模式。从那时起,FTPClient 将在每次打开数据连接时发出 PASV 命令,直到您通过调用 enterLocalActiveMode() 更改数据连接模式或关闭连接。我很好奇是否有人知道我的最佳行动方案应该是什么?我不确定这是一个编程问题,还是更适合另一个“堆栈社区”?
所以它似乎最初处于活动模式。
谢谢你的帮助!