虽然我对Android Emulator不熟悉,但是我假设您需要连接到10.0.2.2才能连接到模拟器主机。
在FTP被动模式下,服务器发回FTP客户端需要连接到的IP地址以传输文件(或目录列表)。当您的FTP服务器侦听127.0.0.1时,它会发回该IP地址。但是在您的Android代码的上下文中,127.0.0.1是指(模拟的)Android主机。因此,“连接被拒绝”。
因此解决方案是相同的:
- 在FileZilla服务器界面中,转到 编辑 >设置>被动模式设置>特定于IPv4>被动模式传输的外部服务器IP地址。并输入10.0.2.2。
- 也许您还需要取消选中 “不要将外部IP用于本地连接” 。
显然,这又使FTP服务器无法用于普通客户端。
您已正确评论,仅当从Android模拟器连接到在模拟器主机上运行的FTP服务器时,才会出现此问题。
另一个解决方案是使用
FTPClient.setPassiveNatWorkaroundStrategy。它接受
HostnameResolver接口的实现。如果以某种方式将127.0.0.1转换为10.0.2.2,则即使服务器上没有任何更改,它也将允许Java代码进行连接。
public static class ServerResolverImpl implements HostnameResolver { private FTPClient client; public ServerResolverImpl(FTPClient client) { this.client = client; } @Override public String resolve(String hostname) throws UnknownHostException { return this.client.getRemoteAddress().getHostAddress(); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)