AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Record via Indy (TCP) versenden
Thema durchsuchen
Ansicht
Themen-Optionen

Record via Indy (TCP) versenden

Ein Thema von TheMiller · begonnen am 2. Jan 2009 · letzter Beitrag vom 25. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Record via Indy (TCP) versenden

  Alt 2. Jan 2009, 21:54
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.
  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: Record via Indy (TCP) versenden

  Alt 2. Jan 2009, 22:34
an welcher stelle genau kommst du nicht weiter?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: Record via Indy (TCP) versenden

  Alt 3. Jan 2009, 12:56
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.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#4

Re: Record via Indy (TCP) versenden

  Alt 3. Jan 2009, 12:58
Du überträgst einfach Length(TDeinRecord) Bytes von der Position 0 Deines Records aus (also @deinRecord).
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#5

Re: Record via Indy (TCP) versenden

  Alt 3. Jan 2009, 13:09
Ok, danke. Ich werde es dann mal testen.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#6

Re: Record via Indy (TCP) versenden

  Alt 3. Jan 2009, 14:34
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
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#7

Re: Record via Indy (TCP) versenden

  Alt 3. Jan 2009, 19:37
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.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#8

Re: Record via Indy (TCP) versenden

  Alt 25. Feb 2009, 13:42
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
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#9

Re: Record via Indy (TCP) versenden

  Alt 25. Feb 2009, 14:05
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));

  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#10

Re: Record via Indy (TCP) versenden

  Alt 25. Feb 2009, 14:19
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.
  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 20:33 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