Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Ist es sinnvoll einen Record zu versenden? (https://www.delphipraxis.net/89706-ist-es-sinnvoll-einen-record-zu-versenden.html)

Muetze1 5. Apr 2007 01:31

Re: Ist es sinnvoll einen Record zu versenden?
 
Zitat:

Zitat von Neutral General
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;

Eine Frage: Warum nicht "SizeOf(l)"? Ich sehe keinen einzigen Grund, ausser sogar den Vorteil, dass SizeOf() den richtigen Wert liefert, wenn man den Datentyp von l später ändert. Warum also dieser Hinweis? Auf welcher Grundlage?

Nuclear-Ping 5. Apr 2007 02:00

Re: Ist es sinnvoll einen Record zu versenden?
 
Da du nicht geschrieben hast, wohin du senden willst (HTTP-Server, FTP-Server, eigene Server-App, ...) gehe ich mal davon aus, dass dein Ziel wohl eine eigene Anwendung sein wird.

Erstmal würde ich dem Server nicht per "String" eine Anweisung geben, sondern per "Opcode". Soll heissen du definierst eine List von möglichen Operationen, die der Client vom Server anfordern kann, ähnlich wie Windows-Messages. Beispiel:
Delphi-Quellcode:
const
  CMD_RECEIVE_PACKET = 1;
  CMD_SEND_PACKET   = 2;
  CMD_SEND_FILE     = 3;
  CMD_FOO_BAR       = ...;
Es wäre auch gut, wenn du dich auf ein Protokoll einigst (also sprich eine "Kommunikationsstruktur"), mit dem Server und Client sich verständigen.

Wie du über Indy 9 sendest, kann ich dir nicht sagen. Wir haben bisher nur mit Indy 8 gearbeitet und 8 zu 9 ist nicht mehr 1:1 kompatibel. Aber bei der 8 ging es z.B. über TIdTCPClient, dort hast du alle möglichen Funktionen: WriteCardinal, WriteBuffer, etc. In den Server-Code kann ich grad keinen Blick werfen, der liegt auf einem anderen Rechner. ^^

Hoffe aber trotzdem, dir etwas geholfen zu haben.

Neutral General 5. Apr 2007 12:28

Re: Ist es sinnvoll einen Record zu versenden?
 
Zitat:

Zitat von Muetze1
Zitat:

Zitat von Neutral General
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;

Eine Frage: Warum nicht "SizeOf(l)"? Ich sehe keinen einzigen Grund, ausser sogar den Vorteil, dass SizeOf() den richtigen Wert liefert, wenn man den Datentyp von l später ändert. Warum also dieser Hinweis? Auf welcher Grundlage?

Hi.. Ja ok bei Zahlendatentypen geht das noch aber es geht nunmal nicht bei allem...(z.B records)

Gruß
Neutral General


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

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