Il processo di comunicazione deve, in pratica, essere un grande "ciclo" in cui

1) controlli se ci sono dati in ricezione e in caso affermativo li ricevi

2) se hai ricevuto dati, li processi

3) controlli se devi inviare dati e in caso affermativo li trasmetti

4) se il programma non deve terminare, torni al passo 1

Escludendo la gestione asincrona dei socket (che per ora non ti consiglio di affrontare), devi impostare il tuo programma in questo modo ...