German Datenaustausch per FTP, grundsätzliche Frage

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,

irgendwie stehe ich auf dem Schlauch, vermutlich fehlen mir da Grundkenntnisse.
Ich versuche einmal mein Problem zu erläutern, ist nicht ganz so einfach zu verstehen:

Meine B4A-App erstellt für den Datenaustausch kleine Textdateien, die per FTP auf einem Webserver gespeichert, um dann von meinem Windows-Programm, ebenfalls per FTP heruntergeladen und verarbeitet werden. Wenn mein Windows-Programm die Datei heruntergeladen hat, wird diese auf dem Server gelöscht.

Jetzt kommt das Problem: in der von der App erstellten und vom Win-Programm heruntergeladenen Datei steht z.B. der Wert 100. Jetzt aktualisiert meine App die Datei in der dann der Wert 200 steht. Mein Windows-Programm holt die Datei, doch der Inhalt ist immer noch 100. Eine Prüfung der Datei direkt auf dem Webserver zeigt, dass darin der korrekten Wert von 200 steht.

Wenn ich eine Weile warte oder mein Win-Progrmm neu starte wird ebenfalls der korrekte Wert angezeigt

Nur was holt dann mein Windows-Programm vom Server?
Gibt es da irgdweine Art von Schattenkopie oder was auch immer?
 

pucki

Active Member
Licensed User
Ich tippe eher auf Cache-Problem.

Ein ähnliches Problem habe ich auch wenn ich mein Tablett direkt anschließe. Versuche mit dein Win-Prg. ein FTP-Refresh Befehl zu senden. Solche Befehle sind unter Visual-Basic gang-und-gebe. Sollte dein Compiler kein Befehl dieser Art haben, dann codiere ein ;) z.B. "Aktualisieren". Der Button trennt dann die FTP-Verbindung und macht sie neu auf. Das sollte das Problem lösen. Ach ja. mein FTP-Server gibt die Datei nur frei, wenn die sendende Verbindung getrennt ist.

Gruß

Pucki
 

peternmb

Well-Known Member
Licensed User
Longtime User
Da die Prüfung, ob auf dem Server eine Datei liegt von meinem Windows-Programm manuell erfolgt baut dieses jedesmal wenn geprüft wird eine neue FTP-Verbindung auf und beendet diese danach wieder.

Wie kann ich die sendende-Verbindung trennen?
Ich verwende nach der Prüfung, ob die Datei hochgeladen wurde (mit FTP_UploadCompleted) den Befehl FTP.Close - das müsste doch genügen?

Die FTP-Funktionen in meinem Windows-Programm basieren auf der WinINet.dll von Microsoft, darin gibt es anscheinend keinen Refresh-Befehl.
 
Last edited:

pucki

Active Member
Licensed User
Welchen Compiler benutzt du unter Windows. ??

Visual-Basic. ?? Weil da ist ein FTP-Client eingebaut. (ohne DLL) mit den ich noch nie Cache-Probleme hatte.

Unter VB für Windows reicht folgender Befehl.

My.Computer.Network.UploadFile(up_file, up_adresse, up_name, up_pass) 'für hoch

My.Computer.Network.downloadFile(up_file, up_adresse, up_name, up_pass) 'für runter

Gruß

Pucki
 

peternmb

Well-Known Member
Licensed User
Longtime User

pucki

Active Member
Licensed User
Lies dir mal die Flags in diesen Link durch.

https://msdn.microsoft.com/en-us/library/windows/desktop/aa384233(v=vs.85).aspx

FTP : https://msdn.microsoft.com/de-de/library/windows/desktop/aa384157(v=vs.85).aspx

Da sind einige die dir sicher helfen.

ich würde auf diese Funktion tippen (habs aber nicht getestet) :
INTERNET_FLAG_RELOAD

Erzwingt das Herunterladen der angeforderten Datei, des Objekts oder der Verzeichnisliste vom Ursprungsserver und nicht vom Cache.

(Übersetzer Text)

Frag mich aber nicht, wie du das in XBase unterbringst ;) Von Xbase hab ich 0 Ahnung. Sorry, nicht alles weiß ;(


Gruß

Pucki
 
Last edited:

peternmb

Well-Known Member
Licensed User
Longtime User
ich würde auf diese Funktion tippen (habs aber nicht getestet) :
INTERNET_FLAG_RELOAD
ja, damit funktioniert es anscheinend, der erste Link bezieht sich auf das HTTP-Protokoll das ich nicht einsetze.

In meiner Lib wird die Flag TransferMode = TRANSFER_TYPE_UNKNOWN gesetzt,
wenn ich das durch die Flag INTERNET_FLAG_RELOAD mit dem Wert 0x80000000 aus dem anderen Beitrag ersetze scheint es zu funktionieren.

Werde ich noch ausführlicher testen, sieht aber gut aus.
 

peternmb

Well-Known Member
Licensed User
Longtime User
Wenn du dann noch verschiedene Dateinamen nutzt (z.B. xxx plus timestamp) tritt diese Problematik erst gar nicht auf.
ja, das wäre natürlich auch eine einfache, leicht umsetzbare Alternative gewesen - vielen Dank für den Tipp.
 
Top