如何使我的delphi应用程序使用FTPS而不是FTP(indy)

如何使我的delphi应用程序使用FTPS而不是FTP(indy),delphi,ftp,indy,delphi-xe3,ftps,Delphi,Ftp,Indy,Delphi Xe3,Ftps,以下是我的节目: Application.FTP.Host:= vHost; Application.FTP.Port:= vPort; try Application.FTP.AutoLogin := false; Application.FTP.Connect; Application.FTP.IOHandler.RecvBufferSize := 2048; 我正在delphixe3中使用TIdFTP组件 我想我得用这样的东西 Application.FTP.UseTLS

以下是我的节目:

Application.FTP.Host:= vHost;
Application.FTP.Port:= vPort;
try
  Application.FTP.AutoLogin := false;
  Application.FTP.Connect;
  Application.FTP.IOHandler.RecvBufferSize := 2048;
我正在delphixe3中使用
TIdFTP
组件

我想我得用这样的东西

 Application.FTP.UseTLS := utUseRequireTLS;
但是编译器不喜欢这一行


如何让我的FTP应用程序使用FTPS?

首先,您需要SFTP(SSH上的FTP)还是FTPS(SSL上的FTP)?它们不是一回事。Indy目前不支持SSH。对于SSL,您可以将SSL IOHandler(如
TIdSSLIOHandlerSocketOpenSSL
)附加到
TIdFTP.IOHandler
属性,然后将
TIdFTP.UseTLS
属性设置为
utNoTLSSupport
以外的任何属性(是的,
TIdFTP
确实具有
UseTLS
属性)。如果需要加密实际的文件传输连接,而不仅仅是命令连接,则可以使用Indy10将
TIdFTP.DataPortProtection
属性设置为
ftpdpsPrivate

,您可以添加一个TIdSSLIOHandlerSocketOpenSSL组件,并将FTP.IOHandler设置为指向此组件

然后在TIdSSLIOHandlerSocketOpenSSL中设置SSL选项


Delphi和Indy的哪些版本?您需要在
FTP.Connect
idsslohandlersocketopensssl1:=tidssliohandlersocketopensl.Create(nil)之前设置此选项;Application.FTP.IOHandler:=idsslohandlersocketopenssl1//TIdSSLIOHandlerSocketOpenSSL Application.FTP.UseTLS:=utUseExplicitTLS;Application.FTP.DataPortProtection:=ftpdpsPrivate我得到了这个错误:[dcc32错误]untOpenCommand.pas(103):E2003未声明的标识符:“utUseExplicitTLS”将
IdExplicitTLSClientServerBase
单位添加到您的uses子句中。这是有效的,但我现在得到了这个错误:[dcc32错误]untOpenCommand.pas(104):E2003未声明的标识符:“ftpdpsPrivate”
ftpC.IOHandler:=iohFTPSE; //TIdSSLIOHandlerSocketOpenSSL 
ftpC.UseTLS:=utUseExplicitTLS;
ftpC.DataPortProtection:=ftpdpsPrivate;