AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Record über Stream versenden....
Thema durchsuchen
Ansicht
Themen-Optionen

Record über Stream versenden....

Ein Thema von mr47 · begonnen am 4. Nov 2006 · letzter Beitrag vom 5. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#1

Record über Stream versenden....

  Alt 4. Nov 2006, 15:56
Hey!

Ich blicks mal wieder "auf keinem Aug"

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
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
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Record über Stream versenden....

  Alt 4. Nov 2006, 16:23
Ich glaube du musst mit Buffern, etc arbeiten ... es sollte hier im Forum allerdings schon einige Themen dazu geben.

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Record über Stream versenden....

  Alt 4. Nov 2006, 16:28
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.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Record über Stream versenden....

  Alt 4. Nov 2006, 16:48
Kann ich keinen ganzen Record versenden? Das ist schon ein bisschen arm!

Naja, trotzdem danke!

mr47
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Record über Stream versenden....

  Alt 4. Nov 2006, 16:52
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.
  Mit Zitat antworten Zitat
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Record über Stream versenden....

  Alt 4. Nov 2006, 16:58
Okay, und wie mach ich aus den Zeigern Daten? Und wie versende ich es dann? Hab nix gefunden in der DP!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Record über Stream versenden....

  Alt 4. Nov 2006, 17:22
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.
  Mit Zitat antworten Zitat
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Record über Stream versenden....

  Alt 5. Nov 2006, 00:33
Hab's rausgefunden. Mein Fehler war: Ich hab vergessen vor dem Auslesen des Streams ein

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

gruß mr47
  Mit Zitat antworten Zitat
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Record über Stream versenden....

  Alt 5. Nov 2006, 11:57
Jetzt hab ich doch nochmal eine Frage. Kann ich beim Empfänger irgendwie feststellen, welchen Datentyp die im Stream enthaltenen Daten haben?


mr47
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Record über Stream versenden....

  Alt 5. Nov 2006, 12:33
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 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