![]() |
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. |
AW: Indy TCP Client empfangen mit Prefix / Suffix
Kenne mich mit Indy nicht so aus, aber das als OpenSource erhältliche ICS
![]() 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 |
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 ![]() Ich glaube, das könnte helfen. |
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
![]() |
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 10:01 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