Ok, arrivando a stampare la risposta significa che le varie connessioni funzionano(o almeno cosi sembra essendo le chiamate a send e recv bloccanti).
Detto questo da una prima occhiata posso intanto dirti che manca la finalizzazione del buffer a, ma non credo che sia questo il problema.

Dopo questa operazione:
codice:
recv(sockid,a,sizeof(a),0);
Devi contare le posizioni di a e assegnare uno 0 a quella finale.
Non so se recv() in C++ come read() in C ritorna il numero di bytes letti.
in quel caso basterebbe fare:
Int nbytes= recv(....);
a[nbytes]=0: