![]() |
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 ![]() und hier ![]() Diskusionen, aber leider keine Lösung zu diesem Thema... |
So als Denkanstoß: Wenn du ein Protokoll wie FTP verwendest, spielt es aus Client-Sicht keine Rolle, auf welchem Betriebssystem der Server läuft.
|
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 |
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. |
Hallo App,
mein Lösungsansatz bezieht sich auf FTP. Mit dem Lesen sieht es dann schlecht aus. bye |
Hallo DPler,
hat noch jemand eine Idee für mich? :cry: |
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. |
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:
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:
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. |
Zitat:
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:
Zitat:
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. |
Hallo tommie-lie,
Das... Zitat:
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... |
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* |
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:
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. |
Zitat:
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