Welche Komponenten müsste ich denn dann benutzen und wie überträgt man dann die Nutzdaten. Muss ich da irgendwie ein eigenes Netzwerkprotokoll entwickeln? Das ist doch wahrsch. overkill, oder?
Die Option 1 scheint mir auch die passendste zu sein. Wenn es kein Peer-to-Peer Chat (ohne zentralen Server) sein muss, werden auf der Clientseite keine Serverkomponenten benötigt. Denn über eine einmall hergestellte
TCP/
IP Socketverbindung kann man sowohl senden (Client->Server) als auch empfangen (Server->Client), auch "gleichzeitig", wenn man zum Lauschen auf die Servernachrichten einen Thread verwendet.
Ein Protokoll, das dem nahe kommt ist Telnet. In der
Indy-Komponentensammlung ist ein Telnet Client (TIdTelnet) und auch ein Telnet Server, der Client benutzt eine Unterklasse von TIdThread um Servernachrichten zu lesen und asynchron zu verarbeiten, dabei wird diese Nachrichtenverarbeitung über Synchronize mit dem Hauptthread synchronisiert.
Telnet ist natürlich nur ein spezieller Anwendungsfall, man kann die
Indy Komponenten aber als Ausgangspunkt nehmen.
Ein verbreitetes Protokoll, das Text- und Binärdaten zwischen Clients effizient, auch mit Server-Push, austauschen kann ist
STOMP. Open Source Client und Server Implementierungen findet man im Internet.