Programación de sockets: ¿Cómo puedo leer un número específico de bytes del búfer?

TCP es un protocolo basado en transmisión. Para convertir esa transmisión en mis mensajes, envío el tamaño de cada mensaje con el mensaje en sí. En el lado del servidor, primero leí los dos primeros bytes del mensaje, que tienen el tamaño. Luego creo una matriz de bytes, de tamaño igual al tamaño que se acaba de leer. Luego leí los bytes en esa matriz. Pero por alguna razón, se leen más bytes de los especificados. ¿Cómo puedo leer exactamente el mismo número de bytes que especifico?

Aquí está mi código:

while (true)
{
    data = null;
    length = null;

    size = new byte[2];

    handler.Receive(size);

    length += Encoding.ASCII.GetString(size, 0, 2);
    System.Console.WriteLine("Size: " + Int32.Parse(length));

    bufferSize = Int32.Parse(length) + 2;
    bytes = new byte[bufferSize];

    handler.Receive(bytes);

    data += Encoding.ASCII.GetString(bytes, 0, bufferSize);
    System.Console.WriteLine("Data: " + data);
}

Este es mi servidor ejecutándose en una PC con Windows, escrito en C #. Mi cliente se ejecuta en un teléfono Android, escrito en Java.

Respuestas a la pregunta(2)

Su respuesta a la pregunta