Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Überprüfen, ob FTP-Verbindung noch steht (WinInet) (https://www.delphipraxis.net/83675-ueberpruefen-ob-ftp-verbindung-noch-steht-wininet.html)

Pfoto 5. Jan 2007 17:52


Überprüfen, ob FTP-Verbindung noch steht (WinInet)
 
Hallo zusammen,

ich hänge gerade an folgendem Problem:

Die FTP-Verbindung wird ja für gewöhnlich nach einer bestimmten Zeit der Inaktivität abgebrochen (macht dies eigentlich der Server oder Windows?)

Der User soll zu einem beliebigen Zeitpunkt eine Datei z.B. hochladen können.
Jetzt wäre es gut, das Programm könnte überprüfen, ob die Verbindung noch steht,
anstatt grundsätzlich eine Neuanmeldung vorzunehmen.

Ich arbeite mit WinInet und habe bei MSDN folgende Funktion gefunden:

Delphi-Quellcode:
BOOL InternetQueryOption(
    IN HINTERNET hInternet OPTIONAL,
    IN DWORD dwOption,
    OUT LPVOID lpBuffer OPTIONAL,
    IN OUT LPDWORD lpdwBufferLength

{ Returns an indication whether this handle uses persistent connections. Can be one of these values: }
INTERNET_KEEP_ALIVE_UNKNOWN
INTERNET_KEEP_ALIVE_ENABLED
INTERNET_KEEP_ALIVE_DISABLED
Mich verwirren allerdings diese Buffer-Sachen,
bisher habe ich folgendes geschrieben:
Delphi-Quellcode:
var
  Buffer: Cardinal;
[...]
  If InternetQueryOption(
     fNet,
     INTERNET_OPTION_KEEP_CONNECTION,
     nil,
     Buffer) = Bool(INTERNET_KEEP_ALIVE_ENABLED) then
Ich habe zwar "Buffer" eingefügt, verstehe aber leider nicht genau,
warum diese Parameter vorhanden sind.

Zudem gibt die Funktion auch bei soeben gestarteter Verbindung ein
"False" zurück.

Weiß jemand Rat? Vielleicht gibt es ja auch eine ganz andere, passende Funktion dafür.


Dank und Gruß
Pfoto

Flips 5. Jan 2007 18:05

Re: Überprüfen, ob FTP-Verbindung noch steht (WinInet)
 
Hi.

Zu deinen Fragen:
Normalerweise hat der Server ein vorgegebenes Timeout, beispielsweise 300s. d.h. wenn 300s abgelaufen sind ohne das was passiert ist, dann trennt er die Verbindung.

Also zu deinem Timeoutproblem und dem Buffer da.
Wieso hällst du die Verbindung nicht einfach offen indem du das Timeout des Servers abfragst un dann immer 5s vor dem Timeout irgendeinen unnötigen Befehl wie dir oder einfach nur ping ausführst? So dürfte die Verbindung immer offen bleiben.

Daniel G 5. Jan 2007 18:06

Re: Überprüfen, ob FTP-Verbindung noch steht (WinInet)
 
Zitat:

Zitat von Pfoto
(macht dies eigentlich der Server oder Windows?)

Das macht der FTP - Server. :wink:

Ich weiß ja nicht, wie du die Daten auf den Server bringst (MSDN-Library durchsuchenFtpPutFile oder eine Verbindung aus MSDN-Library durchsuchenFtpOpenfile und MSDN-Library durchsuchenInternetWriteFile), aber ich würde an deiner Stelle mal gucken, was nachdem die Verbindung serverseitig getrennt wurde, und du die Datei auf den Server bringen willst, die Funktion MSDN-Library durchsuchenInternetGetLastResponseInfo für einen Rückgabewert liefert.

//edit:

@Flips:

Zitat:

Zitat von Flips
Wieso hällst du die Verbindung nicht einfach offen indem du das Timeout des Servers abfragst un dann immer 5s vor dem Timeout irgendeinen unnötigen Befehl wie dir oder einfach nur ping ausführst?

Dafür gibt es den FTP - Befehl NOOP, den man bequem mit MSDN-Library durchsuchenFTPCommand ausführen kann. Problem ist nur, dass manche Server die Verbindung auch so nach z.B. 20 Minuten beenden...

Flips 5. Jan 2007 18:07

Re: Überprüfen, ob FTP-Verbindung noch steht (WinInet)
 
Zitat:

Zitat von Daniel G
Zitat:

Zitat von Pfoto
(macht dies eigentlich der Server oder Windows?)

Das macht der FTP - Server. :wink:

Das wollte ich damit sagen :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 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