Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Dateien von Win <-> Linux exklusiv schreiben/lesen (https://www.delphipraxis.net/5822-dateien-von-win-linux-exklusiv-schreiben-lesen.html)

APP 20. Jun 2003 09:44


Dateien von Win <-> Linux exklusiv schreiben/lesen
 
Hallo,
ich suche nach einer sicheren Möglichkeit, um
einzelne Dateien von WindowsNT Rechnern auf einen
Linux Server exklusiv speichern und lesen zu können.

Unter exklusiv meine ich, dass, wenn mehrere Clients
die gleiche Datei hochladen, nur einer zum Zug kommen
darf, ebenso beim Lesen der Datei (mit Fehlermeldung).

Ich stelle mir das wie eine Transaktion vor.

Ich möchte keine Datenbank verwenden,
nur Linux (z.B. mit Samba oder als FTP Server?).


Wie ihr sicher schon bemerkt habt, bin ich kein Netz/Linux Profi...

p.s.
Es gibt zwar hier
FTP Datei überschreiben???
und hier
Prüfen ob Datei auf FTP vorhanden...
Diskusionen, aber leider keine Lösung zu diesem Thema...

Chewie 20. Jun 2003 10:40

So als Denkanstoß: Wenn du ein Protokoll wie FTP verwendest, spielt es aus Client-Sicht keine Rolle, auf welchem Betriebssystem der Server läuft.

Duffy 20. Jun 2003 10:50

Hallo App,
um eine Datei sicher zu übertragen, wäre es sinnvoll, ihr einen temporären Dateinamen zu geben und sie nach dem Transfer umzubenennen z.B.
...
PUT
Meine_datei
ftp.temporaer.001
REN
ftp.temporaer.001
richtiger_dateiname
...

Beim Lesen der Datei sollte sie dann mit „exklusiv open“ [siehe TFileStream etc] geöffnet werden, was dann bei den anderen Clients zu einem Lesefehler führt.

Ich hoffe, daß Du damit was anfangen kannst.

bye

APP 20. Jun 2003 11:17

Hallo Chewie,
ich weiß das FTP betriebsystemunabhängig ist,
aber ich möchte aus Kostengründen beim Linux-Server bleiben.

Hallo Duffy,
ich suche eher eine Lösung wo ein vorhandenes Protokoll/System
(wie eben vielleicht FTP oder Samba) die Eigenschaft eines sicheren
up/downloads besitzt, da ich nicht vor habe Serversoftware und
Transaktionslogik (noch dazu unter Linux :mrgreen: ) zu schreiben.

Duffy 20. Jun 2003 11:27

Hallo App,
mein Lösungsansatz bezieht sich auf FTP. Mit dem Lesen sieht es dann schlecht aus.
bye

APP 21. Jun 2003 10:29

Hallo DPler,

hat noch jemand eine Idee für mich? :cry:

tommie-lie 21. Jun 2003 12:41

Die Antwort wurde dir doch schon gegeben: FTP.
Damit kannst du Dateien lesend und schreibend von a nach b bringen.
Und wenn du mit "sicher" eine verschlüsselte Verbindung meinst, wäre SFTP etwas für dich, eine Suite dafür wäre z.B. Putty.
Ansonsten SSH, damit habe ich auch schon Daten von meinem Windows-Rechner auf einen Unix-Server hochgeladen.

APP 21. Jun 2003 17:37

Hallo tommie-lie,

mein "dickes" Sicher bezog sich nicht so sehr auf die Übertrageung von
Daten von A nach B sondern eher auf das nachfolgende Exklusiv:
Zitat:

Unter exklusiv meine ich, dass, wenn mehrere Clients
die gleiche Datei hochladen, nur einer zum Zug kommen
darf, ebenso beim Lesen der Datei (mit Fehlermeldung).
Wobei ich eben ein Protokoll/Service suche, das "transaktionsfähig" ist.

Zu FTP habe ich leider zu wenig Infos, auch die Hilfe-Dateien zu den
Indy-Kompos sind (für mich) wenig aussagekräftig -was passiert eben
bei der Übertragung zweier identischer Dateien von verschiedenen
Rechnern auf einen Server?

Bitte nicht vergessen....
Zitat:

Wie ihr sicher schon bemerkt habt, bin ich kein Netz/Linux Profi...
p.s. Ich werde wohl die RFC-0959 durchackern müssen, vielleicht werde
ich dort fündig :-(, oder kann mir darüber jemand in Kurzform Auskunft
geben?

p.p.s. Verschlüsselte Datenübertragung wäre noch das Sahnehäubchen.

tommie-lie 21. Jun 2003 19:13

Zitat:

Zitat von APP
was passiert eben
bei der Übertragung zweier identischer Dateien von verschiedenen
Rechnern auf einen Server?

Das kannst du einfach ausprobieren:
Schnapp' dir Webspace mit FTP-Upload.
Öffne deinen FTP-Client zweimal (oder mit zwei Logons auf dem Server, je nachdem was der Client kann) und lade eine Datei in das gleiche Verzeichnis hoch, und zwar gleichzeitig.
Ich habe es eben bei mir ausprobiert und musste leider feststellen, daß die Datei, die als letztes beendet wird (also die, die ein paar millisekunden länger gebraucht hat *g*) jeweils die vom Dateisystem des Servers übernommene ist.
Ist also automatisch nicht das, was du wolltest. Wenn du aber (mit Indy oder was weiß ich, mit den Netzwerk-Kompos hab' ich's nicht so) einen eigenen FTP-Server schreiben willst, ließe sich das ja ändern, indem du jede eingehende Verbindung auf den Dateinamen überprüfst, schaust ob eine andere, offene Verbindung gerade das gleiche tut, und wenn ja, eine Fehlermeldung schicken.

Zitat:

p.s. Ich werde wohl die RFC-0959 durchackern müssen, vielleicht werde ich dort fündig :-(, oder kann mir darüber jemand in Kurzform Auskunft geben?
Zumindest ich bin beim auswendiglernen erst beim RFC 100 angekommen, da musst du wohl selber lesen :mrgreen:

Zitat:

p.p.s. Verschlüsselte Datenübertragung wäre noch das Sahnehäubchen.
Und eben das geht mit SFTP.
Funktioniert über eine OpenSSH-Verbindung, so wie HTTPS, nur eben mit FTP statz HTTP als Child-Protokoll.
Ob und wie das mit Netzwerkkomponenten zu machen ist, weiß ich nicht. Wenn du Server und Client selber programmierst, kannst du natürlich auch jede beliebige Verschlüsselung der Datenpakete nehmen.

APP 22. Jun 2003 07:35

Hallo tommie-lie,

Das...
Zitat:

Wenn du aber (mit Indy oder was weiß ich, mit den Netzwerk-Kompos hab' ich's nicht so) einen eigenen FTP-Server schreiben willst, ließe sich das ja ändern, indem du jede eingehende Verbindung auf den Dateinamen überprüfst, schaust ob eine andere, offene Verbindung gerade das gleiche tut, und wenn ja, eine Fehlermeldung schicken.
... ist aber genau mein Problem:
Ich suche ein(e) etablierte(s) Protokoll/Funktion welche(s),
die Funktionalität "transaktion" schon eingebaut hat,
damit ich das Rad nicht neu erfinden muß...

Ich denke mir, daß diese, meine gesuchte Funktion/Protokoll (wenn
es z.B. nun FTP oder SAMBA wäre) von vielen Leuten eingestzt wird
und von besserer Qualität wäre, als wenn ich mir nun als 1. Kylix-
Programm einen FTP-Server mit transaktionskontrolle schnitzen würde...

tommie-lie 22. Jun 2003 11:15

So genau kenne ich das FTP-Protokoll auch nicht, aber AFAIK gibt es Fehler-Kommandos. Entweder heißen sie "ERROR", "ERR" oder so ähnlich. Damit könntest du zumindest schonmal die Fehler zurückgeben.
So, damit eingehende Verbindungen immer gleichzeitig ablaufen, solltest du für jede Anfrage einen neuen Thread machen. Wenn du die VCL mit dem TThread nimmst, ginge das mit einem array of TThread, bei der API mit einem array voller Thread-Handles.
Ich kenne die Indies auch nicht, daher gehe ich mal von einer Komponente TidFTPServer aus, die hoffentlich ein Event "OnIncomingRequest" hat. Da schaust du dann, was da angefordert wird (Retry, Stor, Put oder Get) und öffnest einen neuen Thread, um eben diese Datei vom Client zu übertragen, oder zum Client, je nachdem. Das kann mehrfach geschehen, da Threads läuft alles gleichzeitig.
So, bei jedem neu erstellten Thread, also jeder Verbindung, die zustande kommt, schreibst du in eine Liste den Dateinamen der aktuell übertragenden Datei. Wenn dann ein neuer Request kommt, guckst du, ob die angeforderte Datei bereits in dieser Liste steht, also bereits hochgeladen wird. Ist das der Fall, gibst du die Fehlermeldung aus à la "ERROR "This file is being uploaded by another client, please try later."" und wartest auf weitere Kommandos des Clients (z.B. das Hochladen einer anderen Datei).
Soweit zur Theorie. Für die Praxis musst du jemanden finden, der sich mit den Indies auskennt :mrgreen:
Oder deren Handbuch lesen, falls vorhanden ;-)

FTP ist auf jeden Fall von vielen Leuten einsetzbar. Du brauchst ja nur zur richtigen Zeit die richtigen Fehlermeldungen schicken. Ein fertiges Protokoll, daß das macht, ist mir nicht bekannt, aber mit den Protokollen hab' ich's eh nicht so *g*

APP 22. Jun 2003 14:53

Hallo tommie-lie,

danke für Deine ausführliche Beschreibung, ich werde gleich mal von der Theorie in die Praxis gehen und Deine Ideen aufgreifen... :chat:

p.s.
Zitat:

...Ein fertiges Protokoll, daß das macht, ist mir nicht bekannt, aber mit den Protokollen hab' ich's eh nicht so *g*...
...da habe ich als kleiner Maxi mir halt gedacht, das könnte so ähnlich
funken wie bei einem Dateisystem, wo man eine Datei exklusiv öffnen
kann, so daß kein anderer mehr zugreifen kann, bis die Datei wieder
geschlossen wurde.

tommie-lie 22. Jun 2003 16:34

Zitat:

Zitat von APP
da habe ich als kleiner Maxi mir halt gedacht, das könnte so ähnlich funken wie bei einem Dateisystem, wo man eine Datei exklusiv öffnen
kann, so daß kein anderer mehr zugreifen kann, bis die Datei wieder
geschlossen wurde.

Das Internet ist nunmal kein Dateisystem ;-)
Aber theoretisch geht sowas ja schon über die RSH (oder SSH, wenn verschlüsselt) vin Linux, da hast du nämlich schon deine Shell und könntest über diese ein Programm aufrufen. So flexibel ist Linux da ja.
Aber einfacher zu verstehen und mit jedem FTP-Client anzuwenden wäre sicherlich die FTP-Lösung, nicht jeder hat es so mit der RSH und dem Einirchten und Firewall deaktivieren usw...
Und ob eine RSH oder SSH für Windows-Server zur Verfügung steht, weiß ich auch schon wieder nicht...


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