![]() |
Ist es sinnvoll einen Record zu versenden?
Hallo,
ich habe folgendes Problem. Ich möchte gern drei Strings über Indy 9 versenden. Der erste String soll im Server ein Ereigniss auslösen. Dann soll der Server einen Record empfangen, in dem die anderen drei (oder auch mehr) Strings entahlten sind. Meine Frage ist jetzt, ob das wirklich sinnvoll ist, oder ob es andere Möglichkeiten gibt, dies zu realisieren. Vielen Dank Jannik |
Re: Ist es sinnvoll einen Record zu versenden?
ein normaler String in Delphi ist intern ein Pointer. Wenn du also einen Record mit Strings versendest werden nur Pointer verschickt.
|
Re: Ist es sinnvoll einen Record zu versenden?
Zitat:
|
Re: Ist es sinnvoll einen Record zu versenden?
Und gibt es dann vielleicht eine andere Möglichkeit?
|
Re: Ist es sinnvoll einen Record zu versenden?
Wenn du einen Memorystream nimmst, schreibst du am Anfang die Länge des Strings und dann die einzelnen Chars nacheinander.
Delphi-Quellcode:
so mach ich das immer
var
String:String //Dein String MS:TMemoryStream; i:Integer; C:Char; begin MS := TMemoryStream.Create; i:= length(String); MS.WriteBuffer(i,sizeof(i)); For i := 1 to length(String) do begin C := String[i]; MS.WriteBuffer(c,sizeof(c)); end; MS.Free; end; |
Re: Ist es sinnvoll einen Record zu versenden?
Ist es nicht in irgendeiner Art möglich, das über eine Stringlist oder so zu realisieren. Das wäre für mich wesentlich einfacher ... ;)
|
Re: Ist es sinnvoll einen Record zu versenden?
@halinchen: Gewöhne dir generell die Nutzung von Resourcenschutzblöcken an:
Delphi-Quellcode:
Sonst kann es sein, dass es kracht und der Speicher somit nicht freigegeben wird.
MS := TMemoryStream.Create;
try ... finally FreeAndNil(MS); end; @Jannik: Ich weiß nicht genau, was du vorhast, aber du könntest die Daten über IdHTTP.Post() an den Server schicken, auf dem ein PHP-Skript diese auswerten kann, falls das bei dir möglich ist. |
Re: Ist es sinnvoll einen Record zu versenden?
Zitat:
:arrow:
Delphi-Quellcode:
EDIT: Damit Matze zufrieden ist noch Resourcenschutzblöcke hinzugefügt^^
var Str:String
MS:TMemoryStream; l:Integer; begin MS := TMemoryStream.Create; try l:= length(Str); MS.Write(l,SizeOf(Integer)); // nicht SizeOf(l) !! MS.Write(Str[1],l); // Stream speichern/laden/was auch immer finally MS.Free; // jaaa k FreeAndNil(MS) is noch besser... is es eigentlich "schlimm" wenn man nur .Free benutzt ? end; end; Gruß Neutral General |
Re: Ist es sinnvoll einen Record zu versenden?
@Matze: Ich hab das nur hier im Forum getippt. Wenn ich das "richtig" schreibe mache ich das natürlich. Hätte ich dazuschreiben müssen, ich geb's zu...
@Neutral General: Stimmt, kannte ich nicht. :wink: |
Re: Ist es sinnvoll einen Record zu versenden?
OK, es kann sein, dass ich grad ein totales Black-Out hab, aber ich würde mich freuen, wenn mir jemand kurz einmal erklären könnte (gerne auch mit Beispielcode) wie ich einen Record so über den Indy TCP Server/Client verschicke, dass alles ankommt und das auch klappt. Bin so langsam am verzweifeln ... ;)
Danke schonmal |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 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