Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IdFTP - Ermitteln ob Verbindung hergestellt wird bzw dieses Abbrechen (https://www.delphipraxis.net/154527-idftp-ermitteln-ob-verbindung-hergestellt-wird-bzw-dieses-abbrechen.html)

T.E. 14. Sep 2010 14:08

IdFTP - Ermitteln ob Verbindung hergestellt wird bzw dieses Abbrechen
 
Moin moin liebe DPler,

ich hab gerade mal eine Frage zu der IdFTP Komponente.
Und zwar suche ich nun schon ne weile nach einer Möglichkeit abzufragen, ob diese gerade versucht eine Verbindung zu einem Server herzustellen und diesen Verbindungsaufbau abzubrechen, habe da aber bisher noch keine Lösung gefunden.

Außerdem bin ich mir beim Beenden gerade etwas unsicher, denn ich habe in der FormCloseQuery im moment folgendes drin stehen:
Delphi-Quellcode:
procedure TMain_Form.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := MessageDlg('Sind Sie sicher, das Sie das Programm schließen und beenden wollen?' + #13#10 + 'Alle laufenden Transfers werden abgebrochen!', mtConfirmation, [mbYes,mbNo], 0) = mrYes;
  if CanClose = true then
  begin
  { Überprüfe ob gerade Verbindung hergestellt wird }
  //LÖSUNG NOCH GESUCHT

  { FTP Verbindungen trennen }
    //Trenne
    if FTPSrv.Connected then
    begin
      //FTPSrv.Abort;
      FTPSrv.Disconnect;
      FTPSrv.Quit;
    end;

    //Beende
    Application.Terminate;
  end;
end;
Habe aber festgestellt, das wenn ich das Programm beende dies zweimal beenden muss, bevor die Anwendung geschlossen wird. Auch hier suche ich noch nach einer Lösung :|

Besten Dank im voraus für eure Unterstützung.

jfheins 14. Sep 2010 16:14

AW: IdFTP - Ermitteln ob Verbindung hergestellt wird bzw dieses Abbrechen
 
Indys sind iirc blockierend - d.h. während eine Verbindung hergestellt wird, wird kein anderer Code ausgeführt.

Delphi-Quellcode:
procedure TMain_Form.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := MessageDlg('Sind Sie sicher, das Sie das Programm schließen und beenden wollen?' + #13#10 + 'Alle laufenden Transfers werden abgebrochen!', mtConfirmation, [mbYes,mbNo], 0) = mrYes;
  if CanClose then // Nicht auf =true vergleichen!
  begin
    if FTPSrv.Connected then
    begin
      //FTPSrv.Abort;
      FTPSrv.Disconnect;
      FTPSrv.Quit; // beides nötig ???
    end;

    Application.Terminate; // Sinnlos - du hast ja schon canclose auf true gesetzt
  end;
end;

shmia 14. Sep 2010 18:55

AW: IdFTP - Ermitteln ob Verbindung hergestellt wird bzw dieses Abbrechen
 
Die saubere Trennung der FTP-Verbindung sieht so aus:
Delphi-Quellcode:
FTPSrv.Quit;
Man muss nicht einmal abfragen, ob noch eine Verbindung steht.
Wenn man statt Quit gleich die Methode Disconnect aufrufen würde, dann könnte es sein, dass der Server etwas "beleidigt" ist.

Hier der kommemntierte Sourcecodeausschnitt von Indy 9:
Delphi-Quellcode:
procedure TIdFTP.Quit;
begin
  if Connected then begin
    WriteLn('QUIT');  // Server mitteilen, dass jetzt Feierabend ist
  end;
  Disconnect; // TCP/IP - Verbindung schliesen
end;
Mit der Methode Abort kann man eine laufende Datenübertragung abbrechen.
Das ist aber auch nicht die feine englische Art, denn so bleiben abgeschnittene Dateien übrig.

T.E. 15. Sep 2010 06:58

AW: IdFTP - Ermitteln ob Verbindung hergestellt wird bzw dieses Abbrechen
 
Zitat:

Zitat von jfheins (Beitrag 1049586)
Indys sind iirc blockierend - d.h. während eine Verbindung hergestellt wird, wird kein anderer Code ausgeführt.

Aaaah... Super das hilft mir schon mal ein ganzes Stück weiter :)
Gut, aber mal angenommen ich habe gerade einen Transfer laufen und möchte die Anwendung beenden, dann muss der Transfer aber auch durch Quit "beendet" werden richtig? Oder muss ich in diesem Fall zusätzlich vorher noch einmal Abort aufrufen?
Und in dem Fall würden dann ja sowohl mit ,als auch ohne Abort abgeschnittene Dateien übrog bleiben...?!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz