![]() |
Wie richtig einen FTP socket (client) schliesen...!?
Der FTP socket (client) wird folgendermaßen geschlossen
Delphi-Quellcode:
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.
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; Liegt es vieleicht an dem zeitpunkt wo der FTP client geschlossen wird (afterget), weil der socket noch zur der Zeit daten dahin schreibt...!? |
Re: Wie richtig einen FTP socket (client) schliesen...!?
mit
Delphi-Quellcode:
dürfte es keine Exception geben.
TidFTP(ASender).Quit;
hth be blessed |
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... |
Re: Wie richtig einen FTP socket (client) schliesen...!?
Das Ereignis wird ausgeführt aber das Argument "AThread: TIdPeerThread" ist lehr....
|
Re: Wie richtig einen FTP socket (client) schliesen...!?
Wie man sieht wird bei Quit auch Disconnect ausgefürht.
Delphi-Quellcode:
Auf der Serverseite wird auch das OnDisconnect Eregnis ausgelöst, jedenfalls bei Indy 9.0.14 orso...
procedure TIdFTP.Quit;
begin if Connected then begin IOHandler.WriteLn('QUIT'); {do not localize} end; Disconnect; end; |
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. |
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...:((
|
Re: Wie richtig einen FTP socket (client) schliesen...!?
Du solltest den Thread bei OnDisconnect noch freigeben:
Delphi-Quellcode:
Edit:
IdThreadMgrDefault.ReleaseThread(AThread);
Bei Indy 10.0.52 funzt:
Delphi-Quellcode:
IdFTPServer.Contexts.Remove(AContext);
|
Re: Wie richtig einen FTP socket (client) schliesen...!?
Wie kann ich anstat eines Object nur ein integer dem Athread.Data hinzufuegen...!?
|
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. |
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