Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Record mit dynamischen Strings versenden (https://www.delphipraxis.net/171163-record-mit-dynamischen-strings-versenden.html)

luke2 23. Okt 2012 21:15

Delphi-Version: XE2

Record mit dynamischen Strings versenden
 
Hi,

wenn man ein Record per Socket versenden möchte, der Strings enthält, müssen diese ja eine feste Länge haben.
Delphi-Quellcode:
type
  TData = record
    I: Integer;
    R: Real;
    S1: string[50]; //OK
    S2: ShortString; //OK
    S3: string; //geht nicht
  end;

SendBuffer(Socket, Data, SizeOf(Data));
Da die zu versendenden Strings unterschiedlich lang sein können, muss immer der worst-case (bsp. ShortStrings, also 255 Zeichen) angenommen werden. Bei kurzen Strings ist die Datenmenge damit viel größer als nötig.

Natürlich könnte ich alle Strings mit einem Trennzeichen zusammenfassen und dann versenden, diese Lösung erscheint mir aber nicht sonderlich sauber und deshalb wollte ich fragen, ob es eine bessere Lösung gibt ein Record mit dynamischen Strings per Socket zu senden?

Bummi 23. Okt 2012 21:53

AW: Record mit dynamischen Strings versenden
 
sauber Serialisieren
also vor den String die Länge schicken ...

himitsu 23. Okt 2012 22:18

AW: Record mit dynamischen Strings versenden
 
Nja, man könnte zwar den Record versenden und die dynamischen Strings getrennt davon, aber bei Empfangen muß man auf die internen Zeiger der dynamischen stuckturen aufpassen, damit man sich nicht das Speichermanagement zerschießt.


Die Daten schön handlich in/aus einen TReader/TWriter serialisieren?
Oder du nimmst einfach ein statisches Array[..] of Char.

stahli 24. Okt 2012 11:32

AW: Record mit dynamischen Strings versenden
 
@ luke2
Evtl. kannst Du hier mal mitlesen und eine Anregung entnehmen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 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