AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Ist es sinnvoll einen Record zu versenden?
Thema durchsuchen
Ansicht
Themen-Optionen

Ist es sinnvoll einen Record zu versenden?

Ein Thema von Goldesel · begonnen am 4. Apr 2007 · letzter Beitrag vom 5. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Goldesel
Goldesel

Registriert seit: 22. Nov 2004
Ort: Lübeck
202 Beiträge
 
Delphi 2005 Architect
 
#1

Ist es sinnvoll einen Record zu versenden?

  Alt 4. Apr 2007, 15:41
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Ist es sinnvoll einen Record zu versenden?

  Alt 4. Apr 2007, 15:43
ein normaler String in Delphi ist intern ein Pointer. Wenn du also einen Record mit Strings versendest werden nur Pointer verschickt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Ist es sinnvoll einen Record zu versenden?

  Alt 4. Apr 2007, 15:48
Zitat von SirThornberry:
ein normaler String in Delphi ist intern ein Pointer. Wenn du also einen Record mit Strings versendest werden nur Pointer verschickt.
Und wie währe es mit einem non-generischem String!? (ShortString, String[30], ...)
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Benutzerbild von Goldesel
Goldesel

Registriert seit: 22. Nov 2004
Ort: Lübeck
202 Beiträge
 
Delphi 2005 Architect
 
#4

Re: Ist es sinnvoll einen Record zu versenden?

  Alt 4. Apr 2007, 15:55
Und gibt es dann vielleicht eine andere Möglichkeit?
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Ist es sinnvoll einen Record zu versenden?

  Alt 4. Apr 2007, 16:02
Wenn du einen Memorystream nimmst, schreibst du am Anfang die Länge des Strings und dann die einzelnen Chars nacheinander.

Delphi-Quellcode:
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;
so mach ich das immer
  Mit Zitat antworten Zitat
Benutzerbild von Goldesel
Goldesel

Registriert seit: 22. Nov 2004
Ort: Lübeck
202 Beiträge
 
Delphi 2005 Architect
 
#6

Re: Ist es sinnvoll einen Record zu versenden?

  Alt 4. Apr 2007, 17:32
Ist es nicht in irgendeiner Art möglich, das über eine Stringlist oder so zu realisieren. Das wäre für mich wesentlich einfacher ...
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Ist es sinnvoll einen Record zu versenden?

  Alt 4. Apr 2007, 18:29
@halinchen: Gewöhne dir generell die Nutzung von Resourcenschutzblöcken an:

Delphi-Quellcode:
MS := TMemoryStream.Create;
try
  ...
finally
  FreeAndNil(MS);
end;
Sonst kann es sein, dass es kracht und der Speicher somit nicht freigegeben wird.

@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.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Ist es sinnvoll einen Record zu versenden?

  Alt 4. Apr 2007, 18:32
Zitat von halinchen:
Wenn du einen Memorystream nimmst, schreibst du am Anfang die Länge des Strings und dann die einzelnen Chars nacheinander.

Delphi-Quellcode:
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;
so mach ich das immer
Es geht auch einfacher



Delphi-Quellcode:
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;
EDIT: Damit Matze zufrieden ist noch Resourcenschutzblöcke hinzugefügt^^

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Ist es sinnvoll einen Record zu versenden?

  Alt 4. Apr 2007, 18:35
@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.
  Mit Zitat antworten Zitat
Benutzerbild von Goldesel
Goldesel

Registriert seit: 22. Nov 2004
Ort: Lübeck
202 Beiträge
 
Delphi 2005 Architect
 
#10

Re: Ist es sinnvoll einen Record zu versenden?

  Alt 4. Apr 2007, 21:27
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
  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 11:42 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