我一直试图从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(不知道这是什么)
加密:需要显式FTP over TLS
被动模式
强制UTF-8
答案 0 :(得分:1)
感谢您的评论,我的代码运作得很好:
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.