Programação de soquete: Como posso ler um número especificado de bytes do buffer?

TCP é um protocolo baseado em fluxo. Para converter esse fluxo em minhas mensagens, envio o tamanho de cada mensagem com a própria mensagem. No lado do servidor, primeiro li os dois primeiros bytes de mensagem, que têm o tamanho. Então eu crio uma matriz de bytes, de tamanho igual ao tamanho que acabei de ler. Então eu li os bytes nessa matriz. Mas, por algum motivo, mais bytes estão sendo lidos do que o especificado. Como posso ler exatamente o mesmo número de bytes especificado?

Aqui está o meu 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 é o meu servidor executando no Windows PC, escrito em C #. Meu cliente está sendo executado no telefone Android, escrito em Java.

questionAnswers(2)

yourAnswerToTheQuestion