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 via Indy (TCP) versenden (https://www.delphipraxis.net/126806-record-via-indy-tcp-versenden.html)

TheMiller 2. Jan 2009 20:54


Record via Indy (TCP) versenden
 
Vorab: Frohes Neues, hoffe ihr seid alle gut reingerutscht!

Also,

ich suche nach einer Möglichkeit, einen Record per Indy (TCP-Komponente) zu verschicken. Ich habe ein LAN und jeder PC hat einen idTCPServer und einen idTCPClient. Habe mich schonmal ein bissl im Forum umgeschaut, aber so richtig schlau bin ich daraus nicht geworden.

Könnt ihr mir mal ein paar Ansätze geben.

SirThornberry 2. Jan 2009 21:34

Re: Record via Indy (TCP) versenden
 
an welcher stelle genau kommst du nicht weiter?

TheMiller 3. Jan 2009 11:56

Re: Record via Indy (TCP) versenden
 
Hallo,

ich weis zwar, dass ich mit WriteStream und WriteBuffer arbeiten muss, aber ich weis nicht, wie ich damit ein ganzes Record transportieren soll. Mir fehlt es quasi schon am Ansatz.

Phoenix 3. Jan 2009 11:58

Re: Record via Indy (TCP) versenden
 
Du überträgst einfach Length(TDeinRecord) Bytes von der Position 0 Deines Records aus (also @deinRecord).

TheMiller 3. Jan 2009 12:09

Re: Record via Indy (TCP) versenden
 
Ok, danke. Ich werde es dann mal testen.

TheMiller 3. Jan 2009 13:34

Re: Record via Indy (TCP) versenden
 
Hm... ich verstehe es doch nicht.

Mein Problem ist, dass ich nicht weis, ob ich den kompletten record im Ganzen oder jedes Feld einzeln versenden muss? Weiter weis ich nicht, wie ich der Gegeneseite mitteile, wie lang der jetzt kommende String ist.

Wäre nett, wenn mir jemand die Schritte erklären könnte, wie die Prozedur abläuft. Quellcode muss ja nicht sein, wäre aber nett.
Ich versteh's momentan wirklich nicht.

Danke

Reinhard Kern 3. Jan 2009 18:37

Re: Record via Indy (TCP) versenden
 
Zitat:

Zitat von DJ-SPM
Hm... ich verstehe es doch nicht.

Mein Problem ist, dass ich nicht weis, ob ich den kompletten record im Ganzen oder jedes Feld einzeln versenden muss? Weiter weis ich nicht, wie ich der Gegeneseite mitteile, wie lang der jetzt kommende String ist.

Wäre nett, wenn mir jemand die Schritte erklären könnte, wie die Prozedur abläuft. Quellcode muss ja nicht sein, wäre aber nett.
Ich versteh's momentan wirklich nicht.

Danke

Hallo,

wenn du eine neue Datenübetragung definierst, bist du der Definator und Master of the Universe - du bestimmst was Sache ist. Allerdings sollten Senden und Empfang nicht zu aufwendig zu programmieren sein.

Trotz des Mehraufwands würde ich allerdings empfehlen, lesbaren Text zu übertragen (mit ein paar Jahren Erfahrung weniger habe ich auch Binärdaten gesendet). Das erleichtert nämlich bei Hard- und Software das Testen ganz erheblich. D.h. ich würde z.B. senden "TEMP=36.5" für ein Temperaturfeld usw., wie gesagt, wenn du das neu definierst liegt es ja bei dir. Du kannst auch einen ganzen Record übertragen mit T=36.6 CrLf P=1.4 CrLf usw. oder einfach eine Zahlenfolge 36.4,1.4 CrLf. Eine Prüfsumme wäre auch dringend zu empfehlen. Aber eins nach dem anderen.

Gruss Reinhard

Nachtrag: über die Länge kann man sich ja einfach einig sein (festes Format) oder man überträgt sie wie die anderen Daten auch.

TheMiller 25. Feb 2009 12:42

Re: Record via Indy (TCP) versenden
 
Hallo Leute,

ich habe dieses Projekt wieder aufgenommen und weis leider immernoch nicht, wie ich ein Record über die Indy-Komponenten versenden kann. Weis noch nichteinmal welche Prozeduren zu benutzen sind.

Könntet ihr mir da bitte weiterhelfen? Ihr müsst ja keinen Quelltext schreiben - das will ich auch nicht, aber wenigstens eine kleine Erklärung über den Ablauf und welche Prozeduren des Komponenten zu benutzen sind.

Das wäre ehrlich ganz nett...

Danke

jfheins 25. Feb 2009 13:05

Re: Record via Indy (TCP) versenden
 
Also die einfachsate Methode ist folgende:

=> Keine Strings verwenden, sondern ShortStrings

Und dann sowas wie

var
rec: TMyMessageRecord;
begin
// füllen
SendBuffer(@rec, length(rec));

;)

TheMiller 25. Feb 2009 13:19

Re: Record via Indy (TCP) versenden
 
Hm.. ich habe aber nur Read und Write Buffer also Methoden. Mit denen habe ich es jetzt mal so probiert:

Delphi-Quellcode:
procedure TForm1.PngSpeedButton1Click(Sender: TObject);
var
  s: ShortString;
begin
  s:='SDSD';
  IdTCPClient1.Connect();
  IdTCPClient1.WriteBuffer(s, Length(s));
end;

// Empfang

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  s: ShortString;
begin
    AThread.Connection.ReadBuffer(s, 4);
    ShowMessage(s);
end;
Gut, das ist jetzt kein Record, aber eins nach dem anderen. Was passiert ist folgendes: Es öffnet sich eine große Box (1000px hoch, 10px breit. Ohne Inhalt. Wie, wenn man ohne Speichermanager Strings zwischen Dll und Hauptprogramm austauscht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 Uhr.
Seite 1 von 2  1 2      

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