Я бы посоветовал вам оставить сокет открытым, а еще лучше заблокировать его на сервере, чтобы вам не пришлось выполнять Thread.Sleep. Когда на сервере будут какие-то данные, он отправит сообщение клиенту.
Код будет выглядеть примерно так
while(bCollectData)
{
_socket.recv(...); //this line will wait for response from server
//... process message and start another wait in the next iteration.
}
используя этот подход, вы сразу получите все сообщения и избежите ненужных сообщений, отправляемых между клиентом и сервером (сообщения, которые возвращают этот сервер, не имеют данных).