![]() |
Record über Stream versenden....
Hey!
Ich blicks mal wieder "auf keinem Aug" :mrgreen: Ich will einen eigenen Typ (ein Record) über UDP versenden. Der Typ:
Delphi-Quellcode:
Dann send ich mit dem Udp-Client (von Indy) diesen Record. Hier mal sinnvoll mit x benannt :wink:
type
TRemoteData = record name: string; hash: string; ip: string; id: integer; end;
Delphi-Quellcode:
Und jetzt hab ich einen UDP-Server. Aber wie komm ich jetzt wieder an den Record? Ich hab mal sowas gemacht:
client.SendBuffer(x,SizeOf(x));
Delphi-Quellcode:
Und nu?
procedure TForm1.serverUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle); var st: TStream; begin st := TStream.Create; st.CopyFrom(AData,Adata.Size); end; Danke im Voraus! gruß, mr47 |
Re: Record über Stream versenden....
Ich glaube du musst mit Buffern, etc arbeiten ... es sollte hier im Forum allerdings schon einige Themen dazu geben.
Florian |
Re: Record über Stream versenden....
1. deine strings sind nur pointer. du sendest also nur pointer... blöd, was?
2. mach es genau so, wie wenn du in eine datei schreiben würdest bzw. aus einer lesen. Du wirst also die strings einzeln versenden müssen. |
Re: Record über Stream versenden....
Kann ich keinen ganzen Record versenden? Das ist schon ein bisschen arm!
Naja, trotzdem danke! mr47 |
Re: Record über Stream versenden....
Zitat:
|
Re: Record über Stream versenden....
Okay, und wie mach ich aus den Zeigern Daten? Und wie versende ich es dann? Hab nix gefunden in der DP!
|
Re: Record über Stream versenden....
Nix gefunden? Das glaube ich nicht. Wie oben schon erwähnt liegt hier das gleiche Problem vor, als wenn du versuchst diesen Record in eine Datei oder in einem Socket abzulegen und das wurde schon mehrfach besprochen.
Grundlegend: Die String AnsiStrings sind deklariert als Pointer verzeichnet. Wenn du dies nicht möchtest, dann nutze ShortString oder begrenze die Länge des Strings (somit auch eine ShortString Variante). Somit ersetze String durch ShortString und es klappt. Dabei musst du beachten, das ShortString eine maximale Zeichenlänge von 255 Zeichen hat. Wenn die Begrenzung zu eng ist, dann musst du das anders versenden. Dann ist aber ein Record nicht mehr möglich, weil eine Struktur eine feste Grösse hat und ein String der nur durch die maximale Speicherbestückung begrenzt ist (2GB) und dazwischen dynamisch ist, der kann dann schlecht in eine solche Struktur. |
Re: Record über Stream versenden....
Hab's rausgefunden. Mein Fehler war: Ich hab vergessen vor dem Auslesen des Streams ein
Delphi-Quellcode:
zu setzen. Danke für eure Hilfe!
streamXyz.Position := 0
gruß mr47 |
Re: Record über Stream versenden....
Jetzt hab ich doch nochmal eine Frage. Kann ich beim Empfänger irgendwie feststellen, welchen Datentyp die im Stream enthaltenen Daten haben?
mr47 |
Re: Record über Stream versenden....
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:12 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