我一直在尝试从 ftp 服务器获取文件,但每次尝试使用我的代码进行连接时,我都会遇到相同的错误:
EIdSocketError:套接字错误 # 10060 连接超时。
使用 Filezilla 3.4,我可以连接并下载文件,我的代码:
var
objFTP: TidFTP;
begin
try
objFTP := TIdFTP.Create;
try
objFTP.Disconnect;
objFTP.Host := '200.1.81.252';
objFTP.Port := 990;
objFTP.Username := 'user_name';
objFTP.Password := 'user_pass';
objFTP.Passive := True;
objFTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(objFTP);
objFTP.UseTLS := utUseRequireTLS;
objFTP.TransferTimeout := 120000;
try
objFTP.Connect;
objFTP.ChangeDir('/salida/acciones/2015-05-20');
objFTP.Get('SW052015.003', 'C:\SW052015.txt');
finally
objFTP.Disconnect;
end;
finally
FreeAndNil(objFTP);
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
有什么建议吗?
FileZilla 上的配置:
认证端口:990
数据传输端口:9080(不知道这是什么)
加密:需要基于 TLS 的显式 FTP
被动模式
强制使用 UTF-8
最佳答案
感谢评论,我的代码运行良好:
var
objFTP: TidFTP;
sCaminho: String;
begin
sCaminho := 'C:\SW052015.txt';
SysUtils.DeleteFile(sCaminho);
try
objFTP := TIdFTP.Create;
try
objFTP.Host := '200.1.81.252';
objFTP.Username := 'user_name';
objFTP.Password := 'user_pass';
objFTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(objFTP);
objFTP.UseTLS := utUseExplicitTLS;
objFTP.DataPortProtection := ftpdpsPrivate;
try
objFTP.Port := 990;
objFTP.Passive := True;
objFTP.Connect;
objFTP.ChangeDir('/salida/acciones/2015-05-20');
objFTP.Get('SW052015.003', sCaminho);
finally
objFTP.Disconnect;
end;
finally
FreeAndNil(objFTP);
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
关于delphi - idFTP + 连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30440755/