Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy TCP Client empfangen mit Prefix / Suffix (https://www.delphipraxis.net/208520-indy-tcp-client-empfangen-mit-prefix-suffix.html)

OlliWW 9. Aug 2021 14:51

Indy TCP Client empfangen mit Prefix / Suffix
 
Hallo,

Ich implementiere gerade eine TCP Kommunikation mit bestimmten Netzwerkgeräten.

Zu den Geräten schicke ich ein Kommando und empfange eine Antwort.

Ein Kommando besteht aus:
STX (Steuerzeichen) + Kommando + ETX

Die Antwort besteht aus:
STX + Antwort + ETX

Bisher habe ich bei serieller Kommunikation bei der COM Port Komponente ein einfaches "OnReceive" Event gehabt. Vorher ist es möglich ein Datensatz-ENDE Zeichen zu deklarieren (in dem Fall ETX). Jedes Mal wenn die serielle Schnittstelle einen Datensatz + ETX sendet, wird das Event getriggert und ich kann darauf reagieren.

Gibt es in der Indy Sammlung etwas ähnliches?

Den einzigen Weg den ich bisher gefunden habe ist, einen Thread zu schreiben, der einen IdTCPClient nutzt und der dauerhaft ein IOHandler.ReadLn(#$3) ausführt und entsprechend per Synchronize die empfangenen Daten zurück gibt. Hier greife ich mit Threadding etc. schon ziemlich tief ins System ein und da ich eine sehr stabile Lösung brauche, habe ich mich gefragt, ob es nicht schon etwas vorgefertigtes in diese Richtung gibt.

Ich habe mit den IdTCPCmdClient angesehen, dieser macht aber statisch ein ReadLn mit einem LF - was mir leider nicht hilft.

TurboMagic 9. Aug 2021 19:44

AW: Indy TCP Client empfangen mit Prefix / Suffix
 
Kenne mich mit Indy nicht so aus, aber das als OpenSource erhältliche ICS http://overbyte.eu
kann das auf alle Fälle. Deren TWSocket Komponente arbeitwet asynchron, braucht also keinen Thread und hat einen LineMode,
der genau das ist, was du suchst.

Beispielprogramme werden da auch mitgeliefert.

ICS kann auch über GetIt installiert werden.

Grüße

TurboMagic

Michael II 11. Aug 2021 14:09

AW: Indy TCP Client empfangen mit Prefix / Suffix
 
Ich nutze auch ICS.

Aber mit Indy sollte sowas auch gehen - auch ohne zusätzlichen Thread.

Hast du dir das Beispielprogramm, welches in #7 von https://www.delphipraxis.net/208112-tcpclient-read.html verlinkt wird mal runtergeladen?

Ich glaube, das könnte helfen.

mjustin 11. Aug 2021 15:22

AW: Indy TCP Client empfangen mit Prefix / Suffix
 
Wenn die Kommunikation immer aus Request/Response Paaren besteht, ist kein Thread notwendig. Nur wenn die Gegenseite zu beliebigen Zeitpunkten senden kann, auch wenn sie vorher keinen Request erhielt, muss Indy in einem Lese-Thread auf die Nachrichten warten. Ein eventuell bekanntes Protokoll das in Indy mit einem Thread implementiert ist, ist Telnet (Klasse TIdTelnet, siehe https://github.com/IndySockets/Indy/...s/IdTelnet.pas). Senden kann man dann, unabhängig vom Lesen, immer aus dem Hauptthread.

OlliWW 11. Aug 2021 23:20

AW: Indy TCP Client empfangen mit Prefix / Suffix
 
Hallo,

Vielen Dank für die Antworten. Nachdem ich mich jetzt jahrelang mit indy "rumgeschlagen" habe, habe ich aufgrund der Antworten hier die ICS Komponenten ausprobiert. WSocket von ICS tut genau das, was ich möchte. Ein Traum! Und gleichzeitig ärgerlich, dass ich immer mit Indy all die Jahre so viel "drum herum" programmiert habe.

WSocket, LineMode = True, LineEnd = ASCII Char...fertig. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 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