我有一个android应用程序,需要在特定操作点执行一些ftp任务:
将文件列表从电话文件夹上载到ftp主机
获取ftp主机文件夹中的文件列表
将所选文件从ftp下载到手机,下载后从ftp主机中删除文件
它是代码,在ftp下工作得很好,但是当我转到ftps(ddl/tls)时,上面的消息会出错。
下载:
2020-08-20 20:45:45.556 17674-18751/com.centralock.android.app.centralock i/system.out:端口10,1,10,46165169
2020-08-20 20:45:45.716 17674-18751/com.centralock.android.app.centralock i/system.out:200端口命令成功
2020-08-20 20:45:45.732 17674-18751/com.centralock.android.app.centralock i/system.out:stor folder1/folder2/file1.txt
2020-08-20 20:47:53.207 17674-18751/com.centralock.android.app.centralock i/system.out:425无法建立数据连接:连接超时
尝试列出文件也会做同样的事情。
我发现了一些我认为可能有用的代码:sslsessionreuseftpsclient/preparedatasocket,但我认为我没有正确安装它:我只是在ftp管理类文件中包含了这些代码。
2条答案
按热度按时间mdfafbf11#
我们在玩主动和被动的游戏。你是对的,我是对的。
事实证明,在发布这篇文章的第二天,我们的nas制造商发布了一个代码更新,一切都开始工作了。所以请不要理会这个求助请求!
b09cbbtk2#
... 输入/系统输出:端口10,1,10,46165169
port命令表示您正在ftp中使用活动模式。在活动模式下,服务器创建到客户端的连接以传输数据。众所周知,如果途中有防火墙或进行了一些nat或运营商级nat,即从家庭网络到internet或从移动网络的典型访问,这种模式会导致大量问题。
基础设施(firewall,nat)可能会尝试为从服务器到客户机的连接添加必要的防火墙和转换规则,但为了实现对端口的可见性,需要使用命令。但使用ftps时,控制连接是加密的,因此不可能实现可见性。这就是为什么ftps失败而ftp失败的原因。
最好的方法是首先不要使用ftp和ftps,因为这些协议会引起麻烦。如果服务器支持http或sftp(ssh上的文件传输),请改用它。如果不可能,则在被动模式下使用ftp,客户端将创建到服务器的连接,而不是相反的方式。使用
enterLocalPassiveMode
似乎是这样做的,另请参阅apache commons net ftpclient和listfiles()。