Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Wie richtig einen FTP socket (client) schliesen...!? (https://www.delphipraxis.net/39479-wie-richtig-einen-ftp-socket-client-schliesen.html)

m0sch3r 3. Feb 2005 12:25


Wie richtig einen FTP socket (client) schliesen...!?
 
Der FTP socket (client) wird folgendermaßen geschlossen
Delphi-Quellcode:
procedure FTPAfterGet(self : TObject; ASender: TObject; VStream: TStream);
var
    i,   n  : integer;
begin
      try
      [u] TidFTP(ASender).Disconnect;[/u]    
      except
      form1.Debug_Memo.Lines.Add('Error while closed FTPClientSocket' + formatDateTime('hh:nn:ss:', now));
      end; //try
      form1.Debug_Memo.Lines.Add('FTPClientAfterGet' + formatDateTime('hh:nn:ss:', now));
end;
Leider entsteht auf der FTP serverseite ein EConnClosedGracefuly exception (in den Debug Optionen habe ich sie eingeschlossen - trotzdem kommt wieder) oder eine EAccessViolation was auf ein nicht initialisiertes objeckt hinweist. diese beiden Fehlermeldungen entschtehen in Abwechlung auf der Serverseite beim schliesen der FTPclient verbindung.

Liegt es vieleicht an dem zeitpunkt wo der FTP client geschlossen wird (afterget), weil der socket noch zur der Zeit daten dahin schreibt...!?

Meta777 3. Feb 2005 12:30

Re: Wie richtig einen FTP socket (client) schliesen...!?
 
mit
Delphi-Quellcode:
TidFTP(ASender).Quit;
dürfte es keine Exception geben.

hth

be blessed

m0sch3r 3. Feb 2005 12:39

Re: Wie richtig einen FTP socket (client) schliesen...!?
 
kann es sein das duch verwenden des quit anstatt disconnect, das "OnDisconnect" Ereigniss auf der SErver seite nicht ausgeführt wird....!?

beim mir jedenfahls nicht...

m0sch3r 3. Feb 2005 12:55

Re: Wie richtig einen FTP socket (client) schliesen...!?
 
Das Ereignis wird ausgeführt aber das Argument "AThread: TIdPeerThread" ist lehr....

Meta777 3. Feb 2005 12:56

Re: Wie richtig einen FTP socket (client) schliesen...!?
 
Wie man sieht wird bei Quit auch Disconnect ausgefürht.

Delphi-Quellcode:
procedure TIdFTP.Quit;
begin
  if Connected then begin
    IOHandler.WriteLn('QUIT');     {do not localize}
  end;
  Disconnect;
end;
Auf der Serverseite wird auch das OnDisconnect Eregnis ausgelöst, jedenfalls bei Indy 9.0.14 orso...

Meta777 3. Feb 2005 13:01

Re: Wie richtig einen FTP socket (client) schliesen...!?
 
Also die Bindings sind wohl schon freigegeben. Aus diesem Grund benutze ich AThread.Data für Protokollzwecke.
Dort speichere ich die IP beim OnConnect.

m0sch3r 3. Feb 2005 13:02

Re: Wie richtig einen FTP socket (client) schliesen...!?
 
ja stimmt, aber was fur mich wichtig war war im onDissconect (SErver) eregnis die IP aus dem Argument (AThread: TIdPeerThread) aus den UploadSchlange raus zufiltern, jetz gibt es zwar keine häsligen messages, dafur aber bleiben die IP's weiter in Uploadschlange, nach dem disconnect...:((

Meta777 3. Feb 2005 13:05

Re: Wie richtig einen FTP socket (client) schliesen...!?
 
Du solltest den Thread bei OnDisconnect noch freigeben:
Delphi-Quellcode:
IdThreadMgrDefault.ReleaseThread(AThread);
Edit:
Bei Indy 10.0.52 funzt:
Delphi-Quellcode:
IdFTPServer.Contexts.Remove(AContext);

m0sch3r 3. Feb 2005 14:30

Re: Wie richtig einen FTP socket (client) schliesen...!?
 
Wie kann ich anstat eines Object nur ein integer dem Athread.Data hinzufuegen...!?

Meta777 3. Feb 2005 17:46

Re: Wie richtig einen FTP socket (client) schliesen...!?
 
Erstell einfach eins das nur 'n Integer hat (oder was auch immer Du sonst noch brauchst)

Delphi-Quellcode:
TDataObject = class(TObject)
  public
    einInteger : Integer;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.
Seite 1 von 2  1 2      

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