Fehler beim Herstellen einer FTP-Verbindung mit Indy 9



  • Hallo Leute,

    ich verwende BCB 5.0 Pro und Indy 9.
    Für das Herstellen einer FTP-Verbindung zu einem FTP-Server habe ich folgende Funktion geschrieben. Diese Funktion versucht eine FTP-Verbindung aufzubauen, und
    das solange bis es geklappt hat, oder eine maximale Anzahl der Fehlversuche erreicht wurde.

    Das Problem ist, dass nach dem Erreichen der maximalen Anzahl der Fehlversuche
    das Programm abstürtzt, und zwar mit einer Fehlermeldung "Programm hat einen Fehler festgestellt und muss beendet werden". Der Fehler tritt nur dann auf,
    wenn das Programm ohne die Borlandumgebung ausgeführt wird.

    int int_max_erlaubte_Anzahl_Fehlversuche_Verbindungsaufbau = 10;
    
    int TForm1::Verbindung_zum_FTP_Server_herstellen(bool bl_login_user, int int_Timeout)
    {
     // =========================================================================
     // Diese Funktion baut eine Verbindung zum FTP-Server auf.
     // Es wird so lange versucht eine Verbindung aufzubauen bis es geklappt hat,
     // oder die maximale Anzahl erlaubter Fehlversuche erreicht wurde.
     //
     // Übergabeparameter:
     //
     // "bl_login_user": Login the user when connected. Default value is True.
     // "int_Timeout": Timeout in ms.
     //
     // Rückgabeparameter:
     //
     // wenn die Verbindung aufgebaut werden konnte, dann wird "0" zurückgegeben
     // sonst "1"
     // =========================================================================
    
     // Deklaration lokaler Variablen
     // =============================
     int int_Status_FTP_Verbindung_erfolgreich_aufgebaut = 0;
     int int_Anzahl_Fehlversuche                         = 0;
    
     // Solange versuchen die FTP-Verbindung aufzubauen, bis es geklappt hat
     // oder eine Anzahl der Fehlversuche erreicht wurde
     // ====================================================================
     do
     {
      try
      {
       // Prüfen, ob bereits eine FTP-Verbindung besteht.
       // Wenn ja, dann zuerst alte Verbindung trennen
       // ===============================================
       if(IdFTP_Upload->Connected())
       {
        IdFTP_Upload->Disconnect();
    
        // Pause [ms] einlegen
        Delay(100);
       }
    
       // Verbindung zum FTP-Server aufbauen
       // ==================================
       IdFTP_Upload->Connect(bl_login_user, int_Timeout);  // Wenn in dieser Zeile ein Fehler auftritt, dann springt die Programmausführung sofort in den Catch-Block
    
       // Status setzen, dass die Verbindung erfolgreich aufgebaut wurde
       int_Status_FTP_Verbindung_erfolgreich_aufgebaut = 1;
      }
      catch(...)
      {
       // Anzahl der Fehlversuche zählen
       int_Anzahl_Fehlversuche ++;
    
       // Pause [ms] einlegen
       Delay(100);
      }
    
      // Prüfen, ob die Anzahl der Fehlversuche eine bestimmte Grenze erreicht hat
      // Wenn ja, dann die Do-While-Schleife abbrechen
      // =========================================================================
      if(int_Anzahl_Fehlversuche == int_max_erlaubte_Anzahl_Fehlversuche_Verbindungsaufbau)
      {
       break;
      }
    
     }
     while(int_Status_FTP_Verbindung_erfolgreich_aufgebaut == 0);
    
     // Prüfen, ob die Verbindung aufgebaut wurde
     // Wenn ja, dann 0 zurückgeben
     // Wenn nein, dann 1 zurückgeben
     // =========================================
     if(int_Status_FTP_Verbindung_erfolgreich_aufgebaut == 1)
     {
      return 0; // Keine Fehler
     }
     else
     {
      return 1; // Fehler aufgetreten
     }
    
    }
    

    Weis vielleicht jemand von euch woran das liegt, oder wie man es anders machen könnte?

    Danke



  • vor dem break solltest du ggf. sicherstellen, dass IdFTP nicht noch Verbindungs"reste" offen hat. Also die Instanz möglichst sauber beenden, z.B. Disconnect aufrufen, oder Abort.



  • Danke für den Tipp. Das werde ich ausprobieren.


Anmelden zum Antworten