![]() |
Client - Server [Datentrennung]
Hallo alle Zusammen
Ich habe lange gesucht, viel gefunden, aber nie genau das was ich suchte. Das Problem: Ich habe einen Server, 2-5 Clienten ( die anzahl ist erstmal egal mir gehts um prinzip :-p ). Der Client hat in sich viele eigenschafften, zum Beispiel soll er einen Bestimmten Text in eine datei reinschreiben. Oder mir auch eine bestimmte Info zukommen lassen. Aber wie realisiere ich das ? Ich habe da etwas von einem Protokoll gehört... das ungefähr so aussieht: Zumindest stell ich mirs so vor: Server: protokoll senden: TYP:'DateiSchreiben',#1:'DateiName',#2:'Inhalt' oder protokoll senden: TYP:'InfoGeben',#1:'UserName',#2:'' Client: protokoll lesen: if TYP='DateiSchreiben' erstelle datei mit #1 und inhalt #2 und protokoll lesen: if TYP='InfoGeben' lese aus und sende #1 Ich würde gerne wissen wie ich das realisiere. Ich hoffe jemand versteht mich... :pale: Viele Grüße und ein riesiges Dankeschön Nowo |
Re: Client - Server [Datentrennung]
Hallo
Das Protkoll nennt sich Terminator zeichen Protokoll und wird mit #13 getrennt bsp: 'BEFEHL' +#13+ 'TEXT ZUM BEFHEL' 'SCHREIBE TEXT' +#13+ 'DEN ZU SCHREIBENDEN TEXT'; u.s.w Es gibt ein gutes tutorial von dem User narses dafür einfach mal suchen ;) EDIT// habe dir den link mal rausgesucht : ![]() |
Re: Client - Server [Datentrennung]
Das Wichtigeste ist korrekte Differenzierung erstmal beim Server unter den Clients. Ich mache es immer so, dass ich einen Record im Data Feld jedes Sockets speichere in dem ich dann getrennte Buffer und sowas ablege.
Der zweite Punkt ist, dass du darauf achten musst, dass lange Befehle auch als ein einzelnes Stück ankommen, bzw schnell aufeinander gesendete kurze Befehle wirklich getrennt ankommen. Dafür empfiehlt es sich eine Art Software Buffer zu programmieren. Bevor ein Befehl gesendet wird, schickst du erstmal die Länge des Befehls als Cardinal vorweg. Der Empfänger hat einmal einen Pointer oder ein Array als Buffer und eine Cardinal Variable in der dann die Länge des Befehls steht. Er prüft dann, ob die Länge = 0 ist. Wenn ja nimmt er die ersten 4 Bytes der ankommenden Daten als Länge und fügt weitere Daten so lange dem Buffer hinzu, bis die Länge erreicht ist. |
Re: Client - Server [Datentrennung]
Das Tutorial von Narses kenn ich... scheint mir aber meiner meinung nach etwas... ich weis nicht...
gibt es da nicht andere Lösungen ? @Zacherl: Hast du dazu ein Konkretes test/Demo Projekt ? Denn, wie soll ich das sagen... wäre Delphi sie Sprache Latein, hätte ich mein kleines Latinum noch nicht abgeschlossen. |
Re: Client - Server [Datentrennung]
Leider nichts Konkretes da ..
|
Re: Client - Server [Datentrennung]
Mh ok
Dann schonmal vielen Dank an euch beide dazar_t und Zacherl :roll: Hat jemand noch eine Hilfestellung oder eine Seite mit Informationen für mich ? Mir kann jeder Hinweis und jeder Tipp helfen Schöne Grüße Nowo |
Re: Client - Server [Datentrennung]
Zitat:
EDTI: eventuell hilft dir das weiter ist jetzt mal son ps. code aussem Compf und ziemlich hardgecodet also nur als gedanken stütze
Delphi-Quellcode:
procedure Client.OnRead(..) var Buffer: TStringlist; begin ...// Buffer := Socket.REcieve.Text; //.. If Buffer[0] = 'BFEHEL1' begin //WAS BEI BEFEHL EINS TUHEN DABEI BUFFER[1] usw verwenden end; If Buffer[0] = 'BEFEHL2' begin //USW. end; end; //SERVER Socket.SendText('BEFEHL1' +#13+ 'BEFEHLSTEXT'); USW |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 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