You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Delphi开发Android应用:如何用TIdFTP建立非TLS的不安全FTP连接?

解决TIdFTP建立无TLS明文FTP连接的问题

嗨,我之前也碰到过一模一样的情况——有些老旧或者特殊配置的FTP服务器确实只支持明文连接,用默认的TIdFTP设置很容易踩坑。下面是我亲测有效的解决步骤:

关键设置要点

要让TIdFTP完全使用明文连接,你需要调整几个核心属性:

  • 禁用TLS支持:把UseTLS属性设置为utNoTLSSupport,这是最关键的一步,直接告诉组件不要尝试任何加密连接。
  • 确认端口:明文FTP的标准端口是21,确保Port属性没有被误设为990(FTPS加密端口)。
  • 被动/主动模式选择:大多数现代服务器支持被动模式(Passive := True),但如果连接超时,可以切换为主动模式(Passive := False)试试,部分老服务器仅支持主动模式。

完整代码示例

这里给你一个可直接复用的代码片段,包含所有必要设置:

var
  IdFTP1: TIdFTP;
begin
  IdFTP1 := TIdFTP.Create(nil);
  try
    // 核心:关闭所有TLS/SSL支持
    IdFTP1.UseTLS := utNoTLSSupport;
    // 明文FTP标准端口
    IdFTP1.Port := 21;
    // 优先尝试被动模式,若失败可改为False
    IdFTP1.Passive := True;
    
    // 配置服务器信息
    IdFTP1.Host := '你的FTP服务器地址';
    IdFTP1.Username := '你的FTP用户名';
    IdFTP1.Password := '你的FTP密码';

    try
      IdFTP1.Connect;
      ShowMessage('明文FTP连接成功!');
      
      // 这里可以添加你的业务逻辑,比如:
      // IdFTP1.List; // 列出目录
      // IdFTP1.Get('远程文件名', '本地文件名'); // 下载文件
      
      IdFTP1.Disconnect;
    except
      on E: Exception do
        ShowMessage('连接失败:' + E.Message);
    end;
  finally
    IdFTP1.Free;
  end;
end;

额外排查建议

如果还是出现超时错误,可以试试这些排查方向:

  • 检查客户端防火墙/杀毒软件,确保允许Delphi应用访问21端口(主动模式下还要允许服务器访问客户端的动态端口范围)。
  • 若被动模式下数据传输超时,可尝试指定客户端数据端口范围:
    IdFTP1.DataPortRange := TIdPortRange.Create;
    IdFTP1.DataPortRange.Low := 5000;
    IdFTP1.DataPortRange.High := 6000;
    
    记得同时在客户端防火墙上开放这个端口范围。
  • 确保你使用的Indy组件是较新版本,旧版本可能存在明文连接的兼容性问题。

内容的提问来源于stack exchange,提问作者Bazi

火山引擎 最新活动