Rapaz, talvez seja mais simples se você usar duas portas para isso. Uma porta você trabalha o envio de dados e na outra o controle sobre os dados.
Você vai ter que abrir um socket para escuta no servidor, assim que o cliente receber o pacote pela porta 4321 (supondo) o servidor já está preparado para escultar a resposta em 4322.
Lembre-se que ao usar soquete ele fica caindo quando tem comunicação, ou seja se eu tenho um trafego muito grande, pode ser que não dê tempo a maquina levantar o socket novamente andes de um novo pacote chegar, ou seja enquanto eu escuto uma máquina estou surdo para as outras.
O Socket de esculta deve ficar em uma thread isolada do Socket de envio de dados (para que um não atrapalhe o outro) e essa thread da esculta tem que ficar em loop, para quando ela cair depois que receber o pacote, já levantar novamente.
Entre as threads você vai ter que usar algum mecanismo de "memória compartilhada" para que possa saber quando mandar outro pacote, ou reenviar o mesmo pacote que não chegou.
Se achou isso meio complicado... usa TCP que já tá pronto.