Delphi IdFTP[3] TIdFTP.Connect、IdFTP.ReadTimeout - 連接和超時的解讀


Delphi IdFTP[3] TIdFTP.Connect、IdFTP.ReadTimeout - 連接和超時的解讀

1、TIdFTP.Connect - 打開與FTP服務器的連接。

原型:

procedure Connect(AAutoLogin: boolean = True; const ATimeout: Integer = IdTimeoutDefault); reintroduce;

procedure TIdFTP.Connect(AAutoLogin: boolean = True; const ATimeout: Integer = IdTimeoutDefault); 
var
  TmpHost: String;
  TmpPort: Integer;
begin
  try
    //APR 011216: proxy support
    TmpHost:=FHost;
    TmpPort:=FPort;
    try
      if (ProxySettings.ProxyType > fpcmNone) and (Length(ProxySettings.Host) > 0) then begin
        FHost := ProxySettings.Host;
        FPort := ProxySettings.Port;
      end;
      inherited Connect(ATimeout);
    finally
      FHost := TmpHost;
      FPort := TmpPort;
    end;//tryf
    GetResponse([220]);
    Greeting.Assign(LastCmdResult);
    if AAutoLogin then begin
      Login;
      DoAfterLogin;
      SendTransferType;
      // OpenVMS 7.1 replies with 200 instead of 215 - What does the RFC say about this?
      if SendCmd('SYST', [200, 215, 500]) = 500 then begin  {Do not translate}
        FSystemDesc := RSFTPUnknownHost;
      end else begin
        FSystemDesc := LastCmdResult.Text[0];
      end;
      DoStatus(ftpReady, [RSFTPStatusReady]);
    end;
  except
    Disconnect;
    raise;
  end;
end;

參數:

  • AAutoLogin: boolean = True   //連接時登錄用戶。默認值為True。  
  • Timeout: Integer = IdTimeoutDefault   //IdTimeoutDefault是一個常量整數值(默認-1),指示在啟動連接、讀取或寫入遠程計算機系統的方法中應使用默認超時值。IdTimeoutDefault通常用作提供給 TIdTCPClient.Connect方法的超時參數的默認值。

描述:

  • Connect是使用主機和端口屬性打開到FTP服務器的連接的過程。當需要代理服務器連接時,Connect將嘗試使用ProxySettings中主機和端口屬性的值,但如果發生異常,Connect將恢復為原始主機和端口值。Connect調用繼承的Connect方法來打開連接的物理套接字句柄。
  • 當服務器的協議響應代碼為220時,LastCmdResult中的值將分配給Greeting屬性。
  • 當AutoLogin為True時,Connect方法將使用Login方法對連接進行身份驗證,並觸發OnAfterLogin事件處理程序。Connect還發送新連接的TransferType,並發送FTP SYST命令以獲取存儲在SystemDesc中的主機FTP服務器。
  • 成功完成上述步驟后,Connect使用ftpReady狀態值觸發OnStatus事件處理程序。如果在Connect中引發異常,則Connect調用Disconnect並重新引發應用程序異常處理程序的異常。

 

2、IdFTP.ReadTimeout - 指示等待可讀連接的毫秒數。

  • ReadTimeout是一個整數屬性,指示連接應等待對等連接使用協議堆棧變得可讀的毫秒數。
  • ReadTimeout在ReadFromStack中使用。
  • IdFTP.ReadTimeout 實際繼承自 TIdTCPConnection.ReadTimeout 

 

注意(個人經驗和理解):

  • 以上FTP連接的等待時間,如果只設置connect 的 Timeout 實際無效果,還要設置 ReadTimeout 的值
  • Connect的Timeout 是相對於網絡連接通暢的情況下,判斷與服務器的連接所用的超時時間。
  • ReadTimeout 是相對於客戶端而言,讀取的超時時間,即使網絡不通暢的情況下照常判斷。
  • 如果不設置 ReadTimeout  則FTP的連接Connect 將會是 很長時間,大概30s左右(有時候更久)才會拋出異常,因為它本身的連接是阻塞式的。

 

 

 

創建時間:2021.09.15  更新時間:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM