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




