![]() |
Prüfen ob Verbindung zu FTP-Server besteht
Hallo,
ich Verbinde das Programm beim Strt mit einem FTP-Server, auf den dann häufig zugegriffen wird. Wenn aber jemand das Programm eine Weile laufen lassen würde und der Server die Verbindung kappt würden Error-Meldungen kommen. Ich möchte also in jeder Prozedur prüfen, ob die Verbindung zum FTP-Server noch besteht. Gibt es da eine andere Möglichkeit als den Rückgabewert von FtpGetFile, bzw. put- oder deletefile auszuwerten? |
Re: Prüfen ob Verbindung zu FTP-Server besteht
Setz doch im Ereignis OnDisconnect eine Variable, die du dann prüfen kannst. Eventuell hat deine Komponente sogar eine entsprechende Eigenschaft, die du prüfen kannst.
|
Re: Prüfen ob Verbindung zu FTP-Server besteht
Dann müsste doch aber das disconnecten von meinem Programm ausgehen oder nicht? Welches Objekt hat das Ereignis OnDisconneckt?
|
Re: Prüfen ob Verbindung zu FTP-Server besteht
Keine Ahnung. Du hast uns ja nicht gesagt, was du für Komponenten verwendest. Also die Indys haben das genannte Ereignis und auch die Eigenschaft.
|
Re: Prüfen ob Verbindung zu FTP-Server besteht
Danke für die Antworten! Ich habe jetzt versucht, das ganze über die Fehlermeldungen der Up- und Downloadfunktionen zu machen - ich denke das könnte funktuionieren, bisher hatte ich aber noch nicht die Situation, weshalb ich nicht weiß, obs wirklich funktioniert. Ich hab also geschrieben
Delphi-Quellcode:
Ich hoffe, das ist nicht allzu großer Käse...
function TInetFTP.GetFile(const remotefile, localfile: string):Boolean;
begin if not FtpGetFile(FHSession, PChar(remotefile), PChar(localfile), False, FILE_ATTRIBUTE_NORMAL, GetTransferMode, 0) then begin connect(true); // Prozedur zum Verbinden if not FtpGetFile(FHSession, PChar(remotefile), PChar(localfile), False, FILE_ATTRIBUTE_NORMAL, GetTransferMode, 0) then result:=false end else result:=true; end; |
Re: Prüfen ob Verbindung zu FTP-Server besteht
Result könnte aber undefiniert sein. Besser wäre es so:
Delphi-Quellcode:
function TInetFTP.GetFile(const remotefile, localfile: string):Boolean;
begin if not FtpGetFile(FHSession, PChar(remotefile), PChar(localfile), False, FILE_ATTRIBUTE_NORMAL, GetTransferMode, 0) then begin connect(true); // Prozedur zum Verbinden result := FtpGetFile(FHSession, PChar(remotefile), PChar(localfile), False, FILE_ATTRIBUTE_NORMAL, GetTransferMode, 0); end else result:=true; end; |
Re: Prüfen ob Verbindung zu FTP-Server besteht
Manche FTP-Server trennen die Verbindung falls für eine gewisse Zeit keine Aktivität festgestellt wird.
Um das zu verhindern muss in regelmässigen Abständen das NOOP-Kommando gesendet werden, damit der Server mitbekommt, dass der Client noch am Leben ist. NOOP = No Operation Man braucht also einen Timer der z.B. alle 60s das NOOP-Kommando absendet. Bei der WinInet-API sieht das ungefähr so aus:
Delphi-Quellcode:
procedure TInetFTP.NOOP;
begin if not FtpCommand(hConnect,False,FTP_TRANSFER_TYPE_BINARY,PChar('NOOP'),0,nil) then begin raise Exception.Create(SysErrorMessage(GetLastError())); end; end; |
Re: Prüfen ob Verbindung zu FTP-Server besteht
Es gibt aber auch Server (gewisser Anbieter), welche das NOOP ignorieren und dennoch trennen.
|
Re: Prüfen ob Verbindung zu FTP-Server besteht
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 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