![]() |
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. |
Re: Record via Indy (TCP) versenden
an welcher stelle genau kommst du nicht weiter?
|
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. |
Re: Record via Indy (TCP) versenden
Du überträgst einfach Length(TDeinRecord) Bytes von der Position 0 Deines Records aus (also @deinRecord).
|
Re: Record via Indy (TCP) versenden
Ok, danke. Ich werde es dann mal testen.
|
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 |
Re: Record via Indy (TCP) versenden
Zitat:
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. |
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 |
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)); ;) |
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:
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.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr. |
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