Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Record über Stream versenden.... (https://www.delphipraxis.net/80199-record-ueber-stream-versenden.html)

mr47 4. Nov 2006 14:56


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:
type
  TRemoteData = record
    name: string;
    hash: string;
    ip: string;
    id: integer;
  end;
Dann send ich mit dem Udp-Client (von Indy) diesen Record. Hier mal sinnvoll mit x benannt :wink:
Delphi-Quellcode:
client.SendBuffer(x,SizeOf(x));
Und jetzt hab ich einen UDP-Server. Aber wie komm ich jetzt wieder an den Record? Ich hab mal sowas gemacht:

Delphi-Quellcode:
procedure TForm1.serverUDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var st: TStream;
begin
  st := TStream.Create;
  st.CopyFrom(AData,Adata.Size);
end;
Und nu?

Danke im Voraus!

gruß, mr47

Zacherl 4. Nov 2006 15:23

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

DGL-luke 4. Nov 2006 15:28

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.

mr47 4. Nov 2006 15:48

Re: Record über Stream versenden....
 
Kann ich keinen ganzen Record versenden? Das ist schon ein bisschen arm!

Naja, trotzdem danke!

mr47

Muetze1 4. Nov 2006 15:52

Re: Record über Stream versenden....
 
Zitat:

Zitat von mr47
Kann ich keinen ganzen Record versenden? Das ist schon ein bisschen arm!

Natürlich, wenn dein Inhalt nicht aus Zeigern besteht. Aber selbst der lässt sich verschicken, nur dann versendest du halt nur die Adressen der Daten und nicht die Daten selber.

mr47 4. Nov 2006 15:58

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!

Muetze1 4. Nov 2006 16:22

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.

mr47 4. Nov 2006 23:33

Re: Record über Stream versenden....
 
Hab's rausgefunden. Mein Fehler war: Ich hab vergessen vor dem Auslesen des Streams ein

Delphi-Quellcode:
streamXyz.Position := 0
zu setzen. Danke für eure Hilfe!

gruß mr47

mr47 5. Nov 2006 10:57

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

Jelly 5. Nov 2006 11:33

Re: Record über Stream versenden....
 
Zitat:

Zitat von mr47
Kann ich beim Empfänger irgendwie feststellen, welchen Datentyp die im Stream enthaltenen Daten haben?

Denk ich eher nicht. Entweder der Empfänger weiss, was er empfängt, oder Du müsstest eine andere Datenstruktur wählen. XML bietet sich hier an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:12 Uhr.
Seite 1 von 2  1 2      

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