WinSock Datentrennung

AtomSoldier

Mitglied
Hallo alle, wie gehts ? wie stehts ?

Ich habe eine Frage/Problem: Ich bau mir gerade so eine Art Remote Tool (kein Trojaner),
die Verbindung zwischen beiden rechnern und so funktioniert prima. Ich brauche aber ein Prinzip mit dem ich Daten senden kann, und der Server diese Daten annimmt und sie wie auch immer auswertet. Die Daten sollen sich nicht vermischen. Ich habs mir so
vorgestellt:
Ich sende immer sowas:
<Funktionsname;Daten> an den Server
z.b.
<Narchicht;"Hallo">

Der Server soll das annehmen, überpüfen ob es die Funktion Narchicht gibt (CallByName Funktion in einer Klasse.), wenn die Funktion gefunden wurde: Starte Funktion und übergebe ihr die Daten.

Ich hab da schon was gebastelt also z.b:


Server.GetData tmp
Dim Buffer()

Buffer() = Split(tmp";)

Funktion = Buffer(0) ' Narchicht
Daten = Buffer(1) ' Hallo

aber dies ist schlecht, weil sich die Daten vermischen, also wenn ich zwei mal nacheinander mit dem Clienten das an den Server sende,
steht da bei ersten mal in einer MsgBox Hallo
dann bei der zweiten MsgBox da steht aber Hallo mit dem Namen der Funktion also: NarchichtHallo. Die Dateien vermischen sich...

Kann mir jemand ein anderes Prinzip empfehlen ? Das Coden müsst ich schon allein schaffen sonst frag ich hier nach :D.

Danke im Voraus.
Mfg

AtomSoldier

PS: Schönes Wochenende !
 
Bei Server-Client-Anwendungen mit Datenaustausch ist es m.E. sinnvoll, mit 2 Trennzeichen zu arbeiten, bspw. mit Leerzeichen und '|'.

Der Client sendet also "msg Hello World|6|First Messagebox" und der Server interpretiert es indem er erst nach dem ersten Leerzeichen sucht (Instr() - hier ist es an Stelle 4) und dann ab (Leerzeichen + 1) nochmal den String splittet, in diesem Beispiel also mit dem Delimiter '|'.

Damit kannst Du für Deine MsgBox auch den Style und den Titel angeben. Hier ist der Nachrichtentext "Hello World", der Style ist 6 (vbInformation glaube ich), die Caption ist "First Messagebox".

Wenn Du keine weiteren Parameter brauchst, sende mit dem Client einfach noch 'empty' mit, der Server kann das bei der Interpretation berücksichtigen.


Was programmierst Du denn dann ? (auf die Antwort bin ich aber mal gespannt ;) )
 
Ich bin zu dumm :(

? Ich versteh das net, und das soll dazu führen, das keine Daten mehr miteinander vermischt werden ?

Eventuell Beispiel Code ?



PS: Ich mache so eine art Remote Tool also z.b. bei freunden oder so. Es wird wie ein normales Programm und nicht wie ein Trojaner der sich versteckt und ohne Erlaubnis einen Server erstellt....
 
Re: Ich bin zu dumm :(

Bei einfach ein paar DoEvents nach dem Senden und nach dem Empfangen von Daten ein, das hilft unter Umständen.
 
Das verstehe ich jetzt aber auch nicht :

Das Coden müsst ich schon allein schaffen

Eventuell Beispiel Code ?

Wenn Du das verhindern willst, daß zwei Dateneingänge parallel verarbeitet werden, dann kannst Du Dir eine 'Public bolDataProgress' auf Boolean stellen und beim Eingang der Daten auf True setzen, die Nachricht verarbeiten und anschließend auf False stellen. In Deinem Data_Arrival-Ereignis prüfst Du dann erst, ob der boolesche Wert auf False ist und wenn nicht, brichst Du die Sub ab.

Für den Filetransfer ist das allerdings nicht geeignet, dazu erstellst Du besser ein neues Socket über das Du den Transfer laufen lässt.
 
Zurück