Lato server devi mollare indy ed usare ICS (non è cross platform, vale solo per Windows) oppure Synapse (è cross platform, ICS però è il migliore).
Il modo di funzionamento lato server è con un socket bloccante che istanzia un thread per ogni connessione in arrivo.
Lato Client puoi usare IdTCPClient (che funziona bene) all'interno di un thread che lo pilota in fase di connessione - sconnessione e lettura dei dati in arrivo.