Normalerweise sollte das so laufen:
Server sendet an Client eine Message.
Im Client wird ein Event ausgelöst.
(WinSock kann hier eine WM_SOCKET Message in die Message Queue legen)
In der Klasse TClientSocket aus der
Unit ScktComp.pas gibt es dazu das Event OnRead.
http://docwiki.embarcadero.com/Libra...mSocket.OnRead
Der Client liest die bisher angekommenen Daten aus dem Socket und hängt sie an einen Puffer an.
Dann wird untersucht, ob der Puffer eine vollständige Message enthält (erkennbar am abschliesenden Return-Zeichen).
Jede vollständige Message wird aus dem Puffer ausgeschnitten und ausgewertet/bearbeitet.
Die Bearbeitung kann im Hautpthread (da das Event als Windows-Message erzeugt wurde, befinden wir uns im Kontext des Hauptthreads) durchgeführt werden oder einen anderen Thread übergeben werden.
Ich würde
Indy nur dann verwenden, wenn gleichzeitig auch ein Protokoll wie z.B.
POP3,
SMTP,
FTP, ... eingesetzt werden muss.
Wenn man sein eigenes Protokoll benützt und im Prinzip nur
TCP/
IP braucht, dann hat man mit
Indy eine riesige Bibliothek aus der man nur 2% des Codes braucht.
Leider gibt es in
Indy auch keine Trennung zwischen Datentransport (also
TCP/
IP oder UDP/
IP) und dem eigentlichen Protokoll.