Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi idFTP&x2B;连接超时_Delphi_Ftp_Indy - Fatal编程技术网

Delphi idFTP&x2B;连接超时

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

我一直在尝试从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

被动模式


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,一切正常,现在我可以连接并获取文件了!