![]() |
idtcpserver - herausfinden was empfangen wird
Hallo zusammen,
Ich schicke über einen Client gerade einen String mittels
Delphi-Quellcode:
... und empfange ihn im Server im OnExecute-Ereignis mittels
tcpclient.socket.Writeln('Text');
Delphi-Quellcode:
Das klappt auch wunderbar. Es ist ja aber auch möglich über andere Write-Befehler beim Client Integer und Streams etc. zu verschicken. Da würde ja meine Routine versagen, da ja nur STrings eingelesen werden. Gibt es eine Möglichkeit vor dem eigentlichen Empfangen zu PRüfen ob gerade ein String, INteger, Stream ankommt und so den entsprechenden Read-Befehl beim SErver zu benutzen?
RecvString := idTCPServer.AContext.Connection.IOHandler.ReadLn;
Danke im Voraus, SCRaT |
Re: idtcpserver - herausfinden was empfangen wird
Hallo,
Struktur und Umfang des Datenaustauschs regelt ein Protokoll. Was hast du denn vor? Grüße vom marabu |
Re: idtcpserver - herausfinden was empfangen wird
Klar, du kannst generell alles versenden.
Mein Balanced versendet mit dieser Methode die Levels für die Multiplayer ( zum verhindern des Cheatens ... ) Dieses ![]() |
Re: idtcpserver - herausfinden was empfangen wird
Hi
Narses hat im DF zu Protokollen in der Anwendungsschicht einige Tutorials geschrieben, die ich nicht schlecht finde. Wenn du sie noch nicht kennst findest du hier den Einstieg: ![]() Gruß alias5000 |
Re: idtcpserver - herausfinden was empfangen wird
Danke Euch,
ich werde mich mal mit den Links auseinandersetzen. Ich möchte eben je nach empfangenen Daten (Integer, String, Stream) andere Befehle ausführen. In Pseudocode:
Delphi-Quellcode:
SCRaT
if empfangene_daten = string dann mache dies...
if empfangene_daten = integer dann mache jenes... |
Re: idtcpserver - herausfinden was empfangen wird
das sollte ohne weiteres nicht unbedingt möglich sein. Weil du versendest ja im Prinzip nur bits und bytes. Integer oder string ist da drauf ja eigentlich nur ne WEise, wie diese empfangenen Daten interpretiert werden. Ich würde dir dringend zu einem (wenn vllcht auch einfachen) Protokoll raten
Gruß alias5000 |
Re: idtcpserver - herausfinden was empfangen wird
Zitat:
SCRaT |
Re: idtcpserver - herausfinden was empfangen wird
Ein Protokoll, v.a. so, wie es bei dir erfordert wird, sollte nicht allzu schwer sein. Da dürfte ein Terminatorzeichenprotokoll reichen. Und das muss ja nicht 1000 Befehle haben. Ich schreib an nem dezentralen Netzwerkchat mit eigenem Protokoll (
![]() Das Prinzip von nem Terminatorzeichen-Protokoll ist ganz einfach: irgendeinstring + Terminatorzeichen + nocheinstring + Terminatorzeichen + nocheinstring in den strings darf dieses Trennzeichen natürlich nicht vorkommen. Außer: Du hast einen Befehl, der lautet von mir aus DATA. Als Trennzeichen verwende ich jetzt einfach mal "|" Parameter dieses fiktiven Befehls wären: DATA|Typ|diedaten, also im Anwendungsfall z.B. "DATA|string|hallo das ist ein string." Wenn du den string nach dem Trennzeichen zerlegst, kannst du dir ja gleich merken, dass der Befehl DATA nur aus 3 Teilen besteht. Ergo musst du nur die ersten beiden Trennzeichen beachten. Wenn später noch eins kommt, ignorierst du es, weil es in den Bereich "diedaten" gehört. Dann wäre es auch möglich, den String "hallo|hallo" zu versenden: "DATA|string|hallo|hallo". Andere Datentypen, wie integer musst du halt einfach als String behandeln und dann an den Befehlskommand dranklemmen. Das war jetzt ein ganz kurzer mini-Crashkurs für einen Protokoll-Typ, den ich spontan vorschlagen würde, weil er sicher ein Stückchen einsteiger freundlicher ist. Wenn du das jetzt nicht verstanden hast (ich weiß nicht, ob das so verständlich ist, immerhin kenn ich sowas gut), dann les einfach nochmal in den Tutorials nach. Gruß alias5000 |
Re: idtcpserver - herausfinden was empfangen wird
@alias5000
Danke für den ausführlichen Mini-Crash-Kurs :-) Ich werde mich nachher mal an die Umsetzung eines solchen Protokolles machen... Bei Bedarf melde ich mich dann wieder :thumb: SCRaT |
Re: idtcpserver - herausfinden was empfangen wird
Ich klinke mich hier mal ein, weil ich gerade vor dem selben Problem stehe. Ich möchte auch diverse Sachen übermitteln. Ein paar Integer, Strings, aber auch kompliziertere Datenstrukturen oder ganze Dateien. Mein Ansatz wäre, das einfach über Streams zu regeln, die ich versende. Auf der einen Seite wird ein Stream generiert, gesendet und an der anderen Seite nach dem Empfang wieder aufgedröselt. In den Stream würde ich dann einen Header packen, der darüber Aufschluss gibt, was für Daten in dem Stream sind, damit die entsprechend interpretiert werden können. Ist der Ansatz ok, oder kompletter Unsinn? Die Kommunikation würde dann mehr oder weniger komplett über IoHandler.read(aStream) bzw. IoHandler.write(astream) laufen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 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