Witam

Jest sobie prosty serwer i jeszcze prostszy klient. Klient wysyła informację do serwera, ten ma zamienić litery na duże i odesłać.
Nie mogę zrozumieć dlaczego nie może odesłać korzystając z tego samego bufora, którym przyszły dane (bytesRead). (wtedy nic nie odsyła do klienta).
Dlaczego tylko trzeci sposób implementacji w serwerze działa poprawnie

KLIENT

Console.WriteLine("Type 'exit' to exit");
            while (true)
            {
                Console.Write("SEND: ");
                buffer = encoder.GetBytes(Console.ReadLine());
                if (encoder.GetString(buffer) == "exit")
                {
                    break;
                }
                Console.WriteLine("SENDING: " + encoder.GetString(buffer));
                clientStream.Write(buffer, 0, buffer.Length);
                clientStream.Read(buffer, 0, buffer.Length);
                Console.WriteLine("REPLY: " + encoder.GetString(buffer));
            }

SERWER

while (true)
            {
                bytesRead = 0;

                try
                {
                    bytesRead = clientStream.Read(message, 0, 4096);
                }
                catch
                {
                    break;
                }
                if (bytesRead == 0)
                {
                    break;
                }
                Console.WriteLine("RECEIVED: " + encoder.GetString(message, 0, bytesRead));

                //REPLY

                // 1              
             /*sMessage = encoder.GetString(message, 0, bytesRead);
                sMessage = sMessage.ToUpper();
                Console.WriteLine("REPLY: " + sMessage);
                message = encoder.GetBytes(sMessage);
                Console.WriteLine("REPLY: " + encoder.GetString(message, 0, bytesRead));
                clientStream.Write(message, 0, bytesRead);*/
               
                //2
                /*message = encoder.GetBytes(encoder.GetString(message,0,bytesRead).ToUpper());
                Console.WriteLine("REPLY: " + encoder.GetString(message, 0, bytesRead));
                clientStream.Write(message, 0, bytesRead);*/
                
                //3
                byte[] buffer = encoder.GetBytes(encoder.GetString(message, 0, bytesRead).ToUpper());
                clientStream.Write(buffer, 0, buffer.Length);
                Console.WriteLine("REPLY: " + encoder.GetString(buffer, 0, buffer.Length));
               
            }