Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   trennen von Strings ( escape des trennzeichens ) (https://www.delphipraxis.net/87676-trennen-von-strings-escape-des-trennzeichens.html)

Arnulf 4. Mär 2007 13:04


trennen von Strings ( escape des trennzeichens )
 
Hallo
Im Prinzip will ich strings/streams whatever über tcp sockets schicken.
Jetzt hab ich mir ein eigenes Protokoll zusammmengebastelt.

der einfachheit halber hab ich chr(0) bzw. #0 als trennzeichen benutzt.

in meiner send routine cipher ich den string und escape alle möglichen #0 ( mach daraus ein #0#0 )zeichen die vorkommen.
hänge dann ein #0 als trenner an und verschicke das.

aufgrund meines cipherns kann ich aber nicht garantieren, das nicht am anfang des strings auch ein #0 steht.
jetzt könnte es also passieren, das so etwas verschickt wird:

verschickt werden soll:
Zitat:

"string1" "#0string2"
also schaut das mit escape so aus:
Zitat:

"string1#0" "#0#0string2#0".
das würde in einem blöden fall, wenn diese beiden zusammenkommen und die sockets die nachricht zusammenfassen bei mir dann aber so herauskommen

Zitat:

"string1#0#0#0" "string2#0"
gibt es dazu irgendwelche ideen?.

lg
Arnulf

marabu 4. Mär 2007 13:30

Re: trennen von Strings ( escape des trennzeichens )
 
Hallo Arnulf,

auf der Ebene der Textdaten kannst du problemlos mit Terminator- und Delimiterzeichen arbeiten - wobei ich nicht unbedingt NUL verwenden würde sondern eher STX, ETX und RS. Nach dem Verschlüsseln hast du binäre Datenpakete, wenn ich dich richtig verstehe. Ich würde das als eine weitere Kommunikationsschicht mit eigenem Protokoll betrachten und eine Längeninformation voranstellen.

Grüße vom marabu

Arnulf 4. Mär 2007 13:44

Re: trennen von Strings ( escape des trennzeichens )
 
servus marabu

Zitat:

Ich würde das als eine weitere Kommunikationsschicht mit eigenem Protokoll betrachten und eine Längeninformation voranstellen.
Darüber könnte ich natürlich nachdenken - aber bisher hab ichs mir leicht gemacht :).....
alldering müssten die längeninformationen dann eine konstante länge haben also 10 zeichen integer oder sowas und das unkodiert, das würde das problem natürlich lösen.

aber als delimiter #0#1 zu verwenden würde vermutlich auch gehen.

hat mir gerade ein freund empfohlen..
lg
Arnulf

marabu 4. Mär 2007 14:21

Re: trennen von Strings ( escape des trennzeichens )
 
NUL ist als Steuerzeichen selbstverständlich möglich, aber da dieses Zeichen von (und nicht nur von) Delphi bereits intern als Terminator für Zeichenketten verwendet wird, bedarf es dann einer erhöhten Aufmerksamkeit bei der Handhabung. Nur deshalb würde ich auf dieses Zeichen auf der Textebene verzichten.

Die Längeninformation musst du nicht als zehnstellige Zeichenkette voranstellen, es genügen auch DWORD oder QWORD. Wenn du dein Protokoll so aufbaust, dass zuerst ein Byte die Längeninformation ankündigt (0: keine Längeninfo, sondern zeichenterminierter Text; 4: DWORD mit Längeninfo und nachfolg binäre Daten), dann machst du es dir sicher noch leichter als bisher.

Und wenn du einen String aufbaust, der ein JPG-File darstellen soll, dann drückst du die Performanz gewaltig, wenn du jedes Zeichen einzeln hinzufügst. StringReplace() oder eine Vorberechnung der resultierenden Länge ist da deutlich schneller: klick

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz