Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Client - Server [Datentrennung] (https://www.delphipraxis.net/110916-client-server-%5Bdatentrennung%5D.html)

Nowo 26. Mär 2008 18:26


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

dazar_t 26. Mär 2008 18:30

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 : http://www.delphi-library.de/topic_54269.html

Zacherl 26. Mär 2008 18:40

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.

Nowo 26. Mär 2008 18:45

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.

Zacherl 26. Mär 2008 18:47

Re: Client - Server [Datentrennung]
 
Leider nichts Konkretes da ..

Nowo 26. Mär 2008 19:10

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

dazar_t 26. Mär 2008 19:14

Re: Client - Server [Datentrennung]
 
Zitat:

Zitat von Nowo
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

was hast du gegen das tutorial von Narses ? :? :roll: :gruebel: :?:


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