我正在用它上传一些文件。如果我在本地连接中,它可以工作,但是如果使用外部连接,我会收到以下消息:从ftp服务器获取425 Can't open data connection.

我使用org.apache.commons.net.ftp.FTPClient和org.apache.commons.net.ftp.FTPFile库。

public static String gravaImagem(String photoFile) {
    FTPClient mFtp = new FTPClient();
    try {
    mFtp.connect(FTPHOST, PORTA);
    mFtp.login(USUARIO, SENHA);
    mFtp.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);
    mFtp.setFileType(FTPClient.BINARY_FILE_TYPE);
    String origem = Environment.getExternalStorageDirectory().getPath()+File.separator+"Pictures"+File.separator+"ImageSec"+File.separator+photoFile;
    FileInputStream fis = new FileInputStream(origem);
    mFtp.storeFile(photoFile, fis);
    mFtp.logout();
    mFtp.disconnect();
    } catch (SocketException e) {
    e.printStackTrace();
    return "Fail. (ERR#CON3)";
    } catch (IOException e) {
    e.printStackTrace();
    return "Fail. (ERR#CON4)";
    }
    return "Imagem enviada ao servidor.";
}


调试显示没有异常。

最佳答案

来自网络:


  首先-最常见的解决方案:更改主动/被动模式
  设置。但这可能行不通,如果只做一个创可贴
  掩盖真正的问题。
  
  正如我过去提到的,最常见的原因之一是
  发生此错误是FTP服务器软件的配置错误
  本身,与SSL连接和防火墙有关,其中
  连接尝试在伪造的IP地址上建立自己。阅读更多
  关于通过NAT防火墙通过FTP SSL的信息,一些潜在的解决方案
  被包含在内。
  
  还有其他不太可能的原因,例如:
  
  
  服务器配置为始终使用相同的端口进行被动模式连接,或者客户端配置为始终使用
  相同端口用于活动模式连接,尽管在这种情况下
  通常,相关软件应引发其他错误
  首先,但是我已经看到了这种情况。
  在被动模式下,FTP服务器前面的防火墙没有打开正确的端口。所以服务器告诉客户端
  在端口x上连接到ipaddress 1.2.3.4,但防火墙没有
  允许端口x上的传入连接。大多数防火墙都是智能的
  当看到PASV响应时,足以打开端口。副
  反之亦然,活动模式和FTP客户端前的防火墙。
  


从我:
 我在andoird上使用了这个库,并且运行良好,因此请参阅我的复制/粘贴部分。

关于android - Android FTP错误-425无法打开数据连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17351695/

10-11 22:36
查看更多