Hi Alex,
Falls nein, würde ich in MeineDateien ein Verzeichnis ‚Daten
von Server1‘ anlegen und das mit Server1 synchronisieren. Dann
müsste in der REG nur dieser Zusammanhang stehen.
Und in welcher Form würdest du sie da ablegen?
Könntest du mir mal ein Demo hier posten mit ein paar fiktiven
Daten?
hmmm, wie Du weißt, habe ich noch nicht in die Registry geschrieben, ich würde also dieses http://www.activevb.de/tipps/vb6tipps/tipp0107.html Beispiel nehmen und da alles auskommentieren, was ich nicht brauche bis es mir kurt genug ist. Ob ich am Ende genug verstanden habe um das ohne Anleitung zu tippen, weißich noch nicht. Ein paar Zeilen mehr werden das aber schon, Du hast ja wohl schon Übung damit, wozu soll das Dummy-Programm gut sein?
Schreiben würde ich jedenfalls nur den einen Pfad, der im Programm später ohnehin durch einen Laufwerksbuchstaben ersetzt wird, so da0 man dann einfach kopieren kann …
Filecopy „x:“ & RestPfad, „y:“ & RestPfad
Falls ja, dann eben ein Verzeichnis ‚Serverdaten‘, dann müsste
aber sicher gestellt sein, daß die Verzeichnisstruktur der
Server zusammenpasst, die müssten ebenfalls synchronisiert
sein.
Und genau das kann man nicht gewaehrleisten. Denn wenn auf dem
Server ein neues Verzeichnis angelegt wird, das der Client
nicht mitbekommt
es seidenn man ruft die Einstellungen auf
und liest die Daten erneut ein!
Entweder Client oder Server muss die vollständige Verzeichnisstruktur ab dem relevanten Knoten beider Recchner lesen, das Datum letzte Veränderung lesen und an den Clieneten eine Liste übergeben, welche Dateien kopiert werden sollen.
Wie ich Joe verstanden hatte, dautert ihm das rekursive Durchsuchen in der schnellsten Variante noch zu lang, das soll also vorher asynchron passieren, bein Zugriff soll nur noch auf bereits vorhandene Listen zugegriffen werden. Wenn dadurch eine Datei, die erst eine Stunde alt ist, nicht mit kopiert wird, scheint das nicht so dramatisch zu sein.
Wie sieht denn das ‚Quasseln‘ aus? Winsock, ‚SendData‘,
‚DataArrival‘ … ?
Das siehst du in der ServerAnwendung!
Bei der Client Anwendung schreibe ich dir dann welches
Kommando, welches nur Zahlen sind, bedeutet 
Womit haben wir es denn technisch zu tun? LAN, Internet?
Also derzeit nur im LAN! Sprich wir koennen die Daten mittels
FileCopy kopieren 
OK, wir bekommen Laufwerksbuchstaben, ‚Root‘-verzeichnisse und ab da identische Strukturen. Das ist schon mal schön.
Betriebssysteme? Alles Windows oder sind die Server Linux? Was
ist mit FTP?
Soweit ich weiss, alles Window’s Rechner (NT BAsierend)
OK. Danke daß Du nicht geschrieben hast: ‚Dumme Frage, auf Client und Server sollen VB-Programme laufen …‘
Muss denn Winsock überhaupt sein? Muss der Server
aktiv sein, oder genügt es, wenn er passiv die Daten
bereitstellt und wenn nicht, warum? Wie sind die
Sicherheitsanforderungen? Müssen die Daten verschlüsselt
übertragen werden?
Vom Prinzip her koennte man das auch ohne Server Anwendung
lösen und die Clienten selber nachschauen lassen, aber das
wollte Joe nicht. Ergo muss die Serveranwendung gestartet
sein!
Joe war das rekursive Durchsuchen über das Netzwerk zu langsam, stimmt.
Die Daten muessen nicht verschluesselt werden!
Urspruenglich habe ich es mal probiert. Also sie zu
verschluesseln, die Checksumme zu ermitteln. Aber dann geht
die Rechenzeit in die Knie. Stell dir nur mal vor, du willst
ein File von 3 GB transferieren. Da kannste nebenbei arbeiten
gehen
Von daher habe ich das vorerst weggelassen und wollte
es wenn erst einmal alles steht, optional einbauen 
*gg* klar. Im Lan halte ich verschlüsseln auch für überflüssig.
Du siehst, ich habe noch nichts verstanden. Kannst Du mir mal
kurz die Basis zusammenfassen?
Puh, ok. Also kommen wir mal zur Serveranwendung!
Sie wird gestartet. Dort wird der erste registriert und die
Einstellungen aufgerufen! Dort muss man angeben, welchen Port
er horchen soll. Auch muss man dort angeben, welche
Verzeichnisse alles ueberwacht werden sollen. Dieser dialog
wird nur beim ersten Start aufgerufen. Ansonsten muss man das
uebers Menu machen.
Wenn das geschehen ist, oder die Serveranwendung > 1 mal
gestartet wird, so werden sofort die zu ueberwachenden
Verzeichnisse eingelesen!
Änderungen werden dann in der DB gespeichert. Der Server geht
nun auf horchen.
Die Clienten koennen sich nun mit dem Server verbinden!
Kommt nun ein Anfrage zur Synchronisation zustande, so beginnt
er damit wiefolgt!
Der Server schaut in der DB nach, ob schon Daten vom Clienten
vorhanden sind!
Sind keine Vorhanden, so sendet er das Kommando an den
Clienten. Nee iss nich, mir fehlen deine Daten! *grins*
Sind aber Daten vorhanden, so schaut er nach, welche Daten der
Server hat, welche der Client nicht hat oder wo die Version
Servername Verzeichnis
in einem Listview. Dort kannst du nun einen Eintrag
selektieren und dann auf hinzufuegen klickern. Dort waehlst du
dann das verzeichnis aus, welches synchronisiert werden soll (
auf dem Clienten)
Verzeichnisse auf dem Server die nicht synchronisiert werden
sollen, kann man dort löschen ( aus der Liste).
Nachdem das alles erledigt ist, kehrt er zum start zurueck,
welches ich gleich schreibe 
Startest du den Clienten >1 geht er gleich zum Start über!
Der Start. Der Client liesst alle Daten aus seinen zu
synchronisierenden Verzeichnissen ein! Er connected dann mit
beiden Servern und sendet dem ersten Server das Kommando, du
ich will synchronisieren.
1:
Der Server sendet ihm die Daten. Diese werden in einer
Collection abgelegt Danach geht er zu 3!
Hast Du da schon mal einen SpeedTest gemacht? Wie lange dauer das denn? Länger, als die Liste als Textfile zu laden, splitten …?
2:
Der Server sendet ihm, Neee iss nich, mir fehlen Daten, dann
sendet der Client ihm seine Daten, sprich welche er schon hat!
Er geht dann in eine Warteschleife und wartet bis er die
Dateiliste zum laden bekommt. Hat er die geht er weiter zu 3
3: Der Client macht das selbe Spiel wie mit dem Server1 (
Sprich 1 und 2)
4: In der Collection stehen nun alle Daten die er brauch. nun
muss er filtern. Sagen wir mal so, der Client will ja nur 2
Verzeichnisse zum Beispiel sync. haben, er bekommt aber vom
Server ergo eine Liste, welche Daten er laden muss, von all
seinen Verzeichnissen. Dort muessen die unnötigen
Verzeichnisse entfernt werden!
??? Du hattest Doch am Anfang: ‚Es wird vom User festgelegt, welche Verzeichnisse synchronisiert werden sollen.‘ Das kann man dem Server doch mitteilen, daß der nur diese Daten dem Clienten anbietet.
Bsp.
auf dem Server liegt im Ordner „Ordner1“ das File abc.exe und
im Ordner2 das File def.exe und im Ordner3 das file ghi.exe
Der Client will aber nur Ordner1 und Ordner 3 sync. haben.
Beim Clienten liegt im Ordner3 aber bereits das File ghi.exe,
welches identisch ist, so bekommt er eine Liste wo drinnen
steht. Ordner1\abc.exe und Ordner2\def.exe
Wie man sieht muss das File def.exe nicht sync. werden, also
entfernen aus der Collection!
Hmmm, nun weiß ich wieder nicht mehr, was der Server sinnvolles tut. ich hatte am Anfang angenommen, das weiß der Server schon und bietet diese Daten erst gar nicht an.
Die erste Hürde darin besteht, das wenn zum Beispiel der
direkte Pfad zum File abc.exe auf dem Server zum Bsp. wiefolgt
lauten koennte
„D:\MeineDaten\Public\Ordner1\abc.exe“
hierbei waere Public der Frigegebene Ordner. Aber diesen Namen
wissen wir nicht und wir muessen aus dem pfad schauen, welches
File wohin gehört. Aber das sollte kein Thema sein. Einfach
mit instr und left nen vergleich machen 
ähmmmm. Es gibt den Serverpfad, den man in eine Laufwerk schreiben kann. Geht das nicht mit der lokalen Platte auch? ich denke doch.
Dann ist „D:\MeineDaten\Public“ = „X:“, der Server wird „Y:“ und alles was folgt hat identisch zu sein. Wenn „X:\V1\D1.txt“ gleich „X:\V2\D1.txt“ ist, dann gibt es auch „Y:\V1\D1.txt“ gleich „Y:\V2\D1.txt“ und das kann man ja schon im Vorfeld verbieten. Die Sreveranwendung kann/soll so eine doppelte Datei ger nicht erst zum synchronisieren anbieten, am besten nicht zulassen, dann hat sie der Client auch nicht.
Wenn wir nun die Daten gefiltert haben, so lädt dann der
Client genuesslich die Daten via FileCopy und der UNC Notation
oder halt dem netzlaufwerk die Daten.
OK. Der Schluss war schon klar. 
Mehr ist es eigentlich nicht! Hast du soweit die
Funktionsweise verstanden? Traust du dich daran mit zu
basteln?
Verstanden ja, aber wie bereits geschieben habe ich noch Bedenken, ob das so die optimale Lösung ist. ich habe mit Winsock noch nie etwas gemacht, wo es auf Geschwindigkeit ankam.
Daß sich der Client am Server anmelden muss ist klar, aber ob er die Liste nicht besser in ein File scchreibt und nur den Pfad zu der Liste überträgt, bin ich unsicher.
Was noch unklar war: Erst schreibst Du, der server weiß, was der Client braucht und dann soll der Cleint doch selbst filtern, ob er ein Verzeichnis überhaupt benötigt. Hast Du da vergessen, was Du vother schon erledigt hast?
Was mir nun auch unklar ist, was willst Du in der Registry?
Du überträgst alle Verzeichnisstrukturen auf den Server, der hat die in der Datenbank, und kann sie dem Clienten mitteilen. Keine Ahnung, was Du in die Regsitry schreiben willst. Wenn das alles auf dem Server liegt, kann auch mal ohne Folgen eine Festplatte abrauchen. Ich würde keine Daten, die für die Funktion wichtig sind, lokal speichern.
Nötig ist lediglich eine Funktion: ‚Hallo Server! Ich bin noch Client1, aber ich habe alle Daten vergessen, rich mal rüber …‘
Gruß Rainer