Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Prüfen ob Verbindung zu FTP-Server besteht (https://www.delphipraxis.net/142526-pruefen-ob-verbindung-zu-ftp-server-besteht.html)

Samufi 29. Okt 2009 21:16


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?

Luckie 29. Okt 2009 21:19

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.

Samufi 29. Okt 2009 21:39

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?

Luckie 29. Okt 2009 21:44

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.

Samufi 29. Okt 2009 22:00

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:
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;
Ich hoffe, das ist nicht allzu großer Käse...

DeddyH 29. Okt 2009 22:03

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;

sx2008 29. Okt 2009 23:45

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;

himitsu 30. Okt 2009 00:02

Re: Prüfen ob Verbindung zu FTP-Server besteht
 
Es gibt aber auch Server (gewisser Anbieter), welche das NOOP ignorieren und dennoch trennen.

Luckie 30. Okt 2009 00:48

Re: Prüfen ob Verbindung zu FTP-Server besteht
 
Zitat:

Zitat von Samufi
Danke für die Antworten! Ich habe jetzt versucht, das ganze über die Fehlermeldungen der Up- und Downloadfunktionen zu machen

Warum prüfst du nicht den Verbindungsstatus, wie ich es vorgeschlagen habe? Warum nimmst du es in Kauf, ins offene Messer zu rennen?


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