Delphi idFTP&x2B;连接超时
我一直在尝试从ftp服务器获取文件,但每次尝试使用我的代码连接时,都会出现相同的错误: EIdSocketError:套接字错误#10060 连接超时。 使用Filezilla 3.4,我可以连接并下载文件,我的代码:Delphi idFTP&x2B;连接超时,delphi,ftp,indy,Delphi,Ftp,Indy,我一直在尝试从ftp服务器获取文件,但每次尝试使用我的代码连接时,都会出现相同的错误: EIdSocketError:套接字错误#10060 连接超时。 使用Filezilla 3.4,我可以连接并下载文件,我的代码: var objFTP: TidFTP; begin try objFTP := TIdFTP.Create; try objFTP.Disconnect; objFTP.Host := '200.1.81.252'; o
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
被动模式
Force 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.
你检查防火墙设置了吗?允许FileZilla进行网络通信的事实并不意味着您的应用程序也可以进行网络通信。许多防火墙允许每个应用程序配置。我看不到防火墙“规则”(公司策略),但使用cmd上的命令telnet 200.1.81.252 990,我已连接到服务器哪一行实际引发了异常?调用
Connect()
、ChangeDir()
或Get()
?这有很大的不同。此外,除非先成功调用Connect()
,否则不应调用Disconnect()
。此外,请尝试使用utUseExplicitTLS
而不是utUseRequireTLS
此外,如果服务器在数据传输时需要加密,则需要将TIdFTP.DataPortProtection
属性设置为ftpdpsPrivate
(默认情况下,它是ftpdpsClear
-无加密)。谢谢Remy,一切正常,现在我可以连接并获取文件了!