Como separar pacotes adequadamente usando o fluxo de soquetes? C #

Estou construindo um aplicativo servidor / cliente e procurando opções para separar pacotes. Eu li que o mais adequado seria criar um cabeçalho que contém informações sobre o tamanho da carga útil e, em seguida, ler até o final.

Como isso programaticamente funciona?

Também separe aqueles usando a nova linha "\ n". Um exemplo adequado seria bom.

Estou assíncrono recebendo dados desta maneira:

private void AsyncReceive(IAsyncResult result)
    {
        int bytesTransfered;

        try
        {
            bytesTransfered = _handle.EndReceive(result);

            if(bytesTransfered <= 0)
            {
                throw new Exception("No bytes transfered");
            }
        }
        catch(NullReferenceException)
        {
            return;
        }
        catch(ObjectDisposedException)
        {
            return;
        }
        catch(Exception)
        {
            return;
        }


        byte[] received = new byte[bytesTransfered];

        try
        {
            Array.Copy(_readBuffer, received, received.Length);
        }
        catch(Exception)
        {
            Disconnect();
            return;
        }


        // How should I process the received data now?


        try
        {
            _handle.BeginReceive(_readBuffer, 0, _readBuffer.Length, SocketFlags.None, AsyncReceive, null);
        }
        catch(ObjectDisposedException)
        {
            return;
        }
        catch(Exception)
        {

        }
    }

questionAnswers(2)

yourAnswerToTheQuestion