Как правильно разделить пакеты, используя поток Sockets? C #

Я создаю приложение сервер / клиент и просматриваю варианты разделения пакетов. Я читал, что наиболее правильным было бы создать заголовок, содержащий информацию о том, насколько велика полезная нагрузка, и затем читать до конца.

Как это работает программно?

Также разделяя их, используя "\ n" перевод строки. Хороший пример был бы хорош.

Я асинхронно получаю данные следующим образом:

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)
        {

        }
    }

Ответы на вопрос(2)

Ваш ответ на вопрос