Lösung bei Verwendung von
Indy:
1.) Vorausgesetzt, du verwendest
TCP
Auf einer Seite die IdTCPServer-Komponente, auf der anderen brauchst du eine IdTCPClient-Komponente. Nach dem Verbindungsaufbau des Clients zum Server mit Connect bekommst du über das OnConnect-Event eine IdPeerThread (die ich jetzt mal IPT nenne). Mit dieser hast du die Möglichkeit zu Senden und zu Empfangen über die Routinen IPT.Connection.Readxxx und IPT.Connection.Writexxx. Auf der Clientseite hast du per Default Readxxx und Writexxx-Routinen über die IdTCPClient-Komponente. Da eine
TCP-Verbindung bidirektional funktioniert (du kannst also auf beiden Seiten sowohl Senden als auch Empfangen), ist deine Aufgabe recht leicht gemacht ...
2.) Vorausgesetzt, du verwendest UDP
Auf beiden Seiten die IdUDPServer-Komponente verwenden. Die IdUDPServer-Komponente hat ein OnRead-Ereignis und Senderoutinen. Du brauchst also keine Threads (außer das Senden funktioniert bei dir auch Thread-gestützt.)
Lösung zu Threads:
1.) Bei UDP:
Die Komponenten bieten keine Threads, aber da du Callbacks über die OnRead-Ereignisse hast, brauchst du die bei halbwegs eleganter Programmierung auch nicht.
2.) Bei
TCP:
Bis jetzt habe ich auf beiden Seiten einen normalen Thread gestartet, der sowohl Senden, als auch Empfangen übernimmt. Beim Empfangen musst du allerdings allerdings unterscheiden, ob du blockierend (also warten bis Zeichen da sind) oder nicht-blockierend arbeiten willst. Beim nicht-blockierenden Verhalten rufst du zuerst XX.ReadFromStack(true,0,false) auf und danach steht in XX.InputBuffer.Size die Anzahl an empfangen Zeichen zur Verfügung (wenn da 0 drinnsteht, dann keine Read-Routine aufrufen, da du sonst blockierst).
Bei der IdTCP-Serverkomponente glaube ich gäbe es die Möglichkeit den IdPeerThread zu verwenden. Dieser ruft das OnExecute-Ereigbnis der Serverkomponente auf, die als Thread beim Server verwendet werden könnte.
Wenn du aber auf beiden Seiten einen Thread brauchst, dann empfiehlt es sich, diesen nicht zu verwenden, da du ansonsten zwei unterschiedliche Quellcodes für Sender und Empfänger hast. Meine manuell angelegten Threads kann ich aber auch beiden Seiten mit identischem Quellcode verwenden.