Grundlage Server / Client
-
Hallo,
ich bin gerade dabei mich mit einer Server / Client Anwendung zu beschäftigen. Die Server / Client Verbindung funktioniert soweit und ich kann Daten in alle Richtungen senden.
Nehmen wir mal an der Server würde so aussehen:
- Eine Form die zwei Memo's (Memo1 & Memo2)
Der Client sieht so aus:
- Eine Form mit zwei Buttons und ein Edit
Jetzt sollte beim klick auf den einen Button der Text vom Edit beim Server im Memo1 auftauchen und beim klick auf den anderen Button beim Server im Memo2.
Sollte ich als erstes einen Befehl senden der dem Server sagt um welches Memo es sich handelt und dann die eigentlichen Daten?
Wäre die Vorgehensweise mit Befehl & Daten so ok?
Mir geht es um die grundlegende Ansteuerung des Servers?
-
Hallo,
um den Traffic zu mindern solltest du evtl. beides gleichzeitig senden
Memo1=>Das ist ein Text; Memo2=>Das ist auch ein Text;
Du kannst den Server allerdings auch auf zwei verschiedenen Ports lauschen lassen und anhand der Ports das Ziel bestimmen.
LG
-
Aber wie soll der Server wissen wo der Text hin soll (Memo1 oder Memo2)?
Ich könnte dem Server einen AnsiString schicken:
"Memo1:Testtext"
diesen dann auf dem Server nach Memo1 oder Memo2 durchsuchen den Text rausholen und mit einer if-Anweisung dem richtigen Memo zuweisen.
Das ist aber wohl nicht der richtige Weg?
-
Dazu muss man erst einmal wissen, was genau du vorhast. Soll der Text der Memos des Servers clientspezifische Datenanzeigen (d.h. es existiert eine eindeutige Zuordnung von Client zu Memo) oder sollen in dem Memofeld objektspezifische Daten angezeigt werden (z.B. in Memo1 immer Text zu Objekttyp A und in Memo2 immer Text zu Objekttyp B, egal von welchem Client sie kommen) ?
-
Das mit dem Memo war nur ein einfaches Beispiel.
Ich versuche das Problem mal so zu formulieren:
Der Server hat z.B. zwei von mir erstellte Funktionen...
1: int Datei_speichern (AnsiString Pfad, AnsiString Text)
2: AnsiString Datei_einlesen (AnsiString Pfad)
Wie kann der Client dem Server nun mitteilen welche Funktion er ausführen möchte?
Der Client möchte eine Datei speichern und schickt dem Server den Pfad und den zu speichernden Text...
Ich hoffe es ist jetzt verständlicher???
-
ralf123 schrieb:
Ich könnte dem Server einen AnsiString schicken:
"Memo1:Testtext"
diesen dann auf dem Server nach Memo1 oder Memo2 durchsuchen den Text rausholen und mit einer if-Anweisung dem richtigen Memo zuweisen.
Das ist aber wohl nicht der richtige Weg?
Genauso würde ich das auch machen.
Bezogen auf Dein Laden und Speichern kann man analog vorgehen;
Sende einen AnsiString von z.B. "Datei_Speichern:Path;Text;"
oder "Datei_Einlesen:Path" an den Server und parse dann den InhaltSiehe dazu AnsiString::Pos
Weiterhin vmtl nützlich ::Delete, ::SubStr
-
Wäre es auch möglich die einzelnen Bestandteile (Datei_speichern / Pfad / Text) einzeln zu versenden?
Dann müßte ich den AnsiString nicht durchsuchen. Somit wäre "Datei_speichern" der eigentliche Befehl der dem Server sagt was zu tun ist. Und Pfad / Text die eigentlichen Daten.
Ich habe es aber noch nicht geschafft die Daten so zu verschicken, damit sie beim Server einzeln ankommen. Sollte ich zwischen den einzelnen SendText-Befehlen ein kleines Delay einschieben?
Scheint mir aber nicht das "Gelbe vom Ei" zu sein, oder?
-
^^Genau das ist das Problem, dass schnell hintereinander versendete Strings als ein grosser übertragen werden.
Den String zu parsen ist vermutlich die beste Methode, eine Pause zu erzeugen eher eine unzuverlässigere (bremst die Performance, dürfte nicht mehr funktionieren, wenn bereits viel Traffic vorliegt).Vorstellbar wäre ein derartiges System:
SaveFile:Path;Text!
Prüfe mit AnsiString::Pos, ob SaveFile, oder ReadFile aufgerufen wurde
Alles zwischen : und ; gibt den Pfad an (::SubStr in Verbindung mit ::Pos)
ab ; bis ! gibt den Inhalt an
! entspricht dem Ende einer NachrichtSchau lieber nochmal in die Hilfe, denn da sind auch Beispiele aufgezeigt; bei konkreten Fragen wird Dir auch hier weiter geholfen.
-
OK. Das Parsen ist kein Problem.
Dann werde ich mich mal an die Arbeit machen
Danke