Próbuję napisać serwer i klienta do komunikatora. Wzoruję się na tym przykładzie http://www.switchonthecode.com/tutorials/csharp-tutorial-simple-threaded-tcp-server .
Problemem jest, że w zaznaczonym miejscu dostaję wyjątek :

IOException: Unable to write data to the transport connection: An existing connection was forcibly closed by the remote host.

int bytesRead; NetworkStream clientstream; byte[] message;
while (true)
   {
     bytesRead = 0;

     try
     {
       //blocks until a client sends a message
       bytesRead = clientStream.Read(message, 0, 4096); // tutaj dostaję wyjątek 
     }
     catch(Exception ex)
     {
       //
       break;
     }
}

Z tego co udało mi się wywnioskować to problemem jest ,że Read nie daje gwarancji, że wszystko się odczyta. Jeśli nie, na czym polega ten problem i w jaki sposób mogę się go pozbyć?
Dziękuję i pozdrawiam.