【发布时间】:2026-01-30 02:10:01
【问题描述】:
我正在使用 Delphi 开发一个 android 应用程序。我的 ftp 服务器有问题。对于我不知道的任何原因,它只接受标准的 ftp 连接(没有 TLS)。我收到 超时错误,代码如下:
function uploadfile(imagetoload:TBitmap;place_id:string):boolean;
var
filename:String;
url,imagepath:string;
FTP: TIdFTP;
begin
try
try
filename:='PPic-'+user_id+'-'+DateToStr(today)+TimeToStr(Today)+'.jpg';
filename:=replacetext(filename,'/','-');
filename:=replacetext(filename,':','-');
imagepath:=system.IOUtils.TPath.Combine(system.IOUtils.TPath.GetDocumentsPath,filename);
imagetoload.SaveToFile(imagepath);
ftp := TidFTP.Create(Nil);
ftp.Host:=FTPSERVER;
ftp.Username:=FTPUSR;
ftp.Password:=FTPPWD;
ftp.Passive := True;
ftp.ConnectTimeout := 6000;
ftp.Connect;
我尝试使用 filezilla 连接到 ftp 服务器,并且仅在我选择普通 ftp 连接时才接受连接。
有没有办法通过 TIdFTP 使用不安全(无 TLS)连接?
非常感谢。
【问题讨论】:
-
我认为这已经是默认设置了。为什么您认为 TLS 是您的代码失败的原因? (另外,如果它是您的服务器,如果您认为这是问题所在,为什么不启用 TLS?)
-
是的,没有 TLS 是默认设置。您必须采取额外的步骤来启用 TLS,尤其是在 FTP 中,因为它使用多个连接。您的超时与其他事情有关。
Connect()(可能)发送许多 FTP 命令,其中任何一个都可能超时。如果不知道超时实际发生在哪里 - 建立套接字连接,发送命令或读取响应时,很难诊断此问题。我建议将TIdLog...组件附加到TIdFTP.Intercept属性并记录活动以查看Connect()的距离 -
我认为 TLS 是原因,因为当我尝试将它与 Filezilla 连接时,我得到“超时”,但是当我将连接更改为标准普通(不安全)时,它可以工作。我一直在与 CPD 提供商交谈以了解会发生什么,但他们也不知道……我将尝试找到如何在服务器中启用 TLS。谢谢。
-
我去查看filezilla的日志,然后尝试使用Intercept。让我检查一下。谢谢