AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IdFTP - Ermitteln ob Verbindung hergestellt wird bzw dieses Abbrechen
Thema durchsuchen
Ansicht
Themen-Optionen

IdFTP - Ermitteln ob Verbindung hergestellt wird bzw dieses Abbrechen

Ein Thema von T.E. · begonnen am 14. Sep 2010 · letzter Beitrag vom 15. Sep 2010
Antwort Antwort
T.E.

Registriert seit: 27. Mai 2007
Ort: Hamburg
284 Beiträge
 
Delphi XE2 Enterprise
 
#1

IdFTP - Ermitteln ob Verbindung hergestellt wird bzw dieses Abbrechen

  Alt 14. Sep 2010, 14:08
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.
Gruß Torben
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

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

  Alt 14. Sep 2010, 16:14
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;
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

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

  Alt 14. Sep 2010, 18:55
Die saubere Trennung der FTP-Verbindung sieht so aus: 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.
Andreas
  Mit Zitat antworten Zitat
T.E.

Registriert seit: 27. Mai 2007
Ort: Hamburg
284 Beiträge
 
Delphi XE2 Enterprise
 
#4

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

  Alt 15. Sep 2010, 06:58
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...?!
Gruß Torben
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz