Entwickler-Ecke

Internet / Netzwerk - Packeterstellung Strings / TMemoryStream?


Boogi - So 20.11.05 18:03
Titel: Packeterstellung Strings / TMemoryStream?
Hi,

ich versuch grad n Netzwerkspiel zu coden.
Ich hab n einfaches Protokoll ausgedacht und bin grad dabei alle möglichen Daten (strings, sonst variablen) in ein 'Packet' zu packen, zu verschicken und wieder aufzudröseln.
Jetzt hab ich folgende Frage:

Ist es besser alles in nen String zu packen und den zu versenden oder soll ich das mit nem MemoryStream machen.

String:
+ gibt viele schöne Procedures zum bearbeiten
+ kann ich problemlos verschicken und empfangen
- ich weiß net wie ich zb nen Float rein- und rauskopier, so dass der wirklich nur 4 / 8 byte im string belegt (FloatToStr/StrToFloat scheidet für mich aus)

TMemorystream:
+ kann beliebige Variablen hintereinander schreiben und wieder auslesen
- wie kann ich einzelne Zeichen auslesen/löschen/verschieben...
- bei tests kam immer nur müll am anderen ende an

Gruß Steffen


Narses - Di 22.11.05 11:14

Moin und :welcome: im Forum!

user profile iconBoogi hat folgendes geschrieben:
Ist es besser alles in nen String zu packen und den zu versenden oder soll ich das mit nem MemoryStream machen.

Ich rate grundsätzlich zu String-basierten Protokollen, möglichst nur mit druckbaren Zeichen; das erleichtert das Debugging ungemein. Was nun nicht heißt, dass man niemals Binärdaten verschicken sollte, sondern binäre Protokolle sollte man auf die wirklich notwendigen Dinge begrenzen.

user profile iconBoogi hat folgendes geschrieben:
ich weiß net wie ich zb nen Float rein- und rauskopier, so dass der wirklich nur 4 / 8 byte im string belegt (FloatToStr/StrToFloat scheidet für mich aus)

Du könntest z.B. die 4/8 Bytes der FloatVar in hex-Darstellung in den String packen, ist 'nur' Faktor 2 und es findet keine Rundung statt, druckbar bleibt´s auch. Alternative: definiere einen String-Frame für die 4/8 Bytes im Binärformat und pack sie direkt in den String mit rein (schlechtere Variante, IMHO).

Fazit: Ich kann mir nicht vorstellen, dass der Faktor 2 für die hex-Version bei deinem Spiel einen so krassen Performanceverlust bewirkt, dass es nicht umsetzbar wäre.

cu
Narses


Boogi - Mi 23.11.05 15:17

Hi,

ich werd das ganze jetzt doch über nen TMemoryStream machen, da ich dort einfach beliebige Variablen reinkopieren kann. Die Probleme, die ich damit hatte, sind weitgehend gelöst (Strings in MS schreiben etc.).

Die Befehle und Kontrollstrukturen sind weiterhin Klartext, so dass es auch einfach debugged werden kann.

Gruß Steffen