Реализация SuperSocket ReceiveFilter

Согласно документации SuperSocket, я должен реализовать ReceiveFilter, который будет получать двоичные данные и преобразовывать их в объект, чтобы мое приложение могло с ним работать.

В настоящее время я работаю на стороне клиента, используя SuperSocket.ClientEngine. Из документации видно, что FixedHeaderReceiveFilter - Фиксированный заголовок с протоколом длины тела будет работать лучше для меня. Однако я не совсем понимаю, это логика.

Таким образом, он использует первые четыре байта в качестве имени запроса и два байта в качестве длины тела запроса.

/// +-------+---+-------------------------------+
/// |request| l |                               |
/// | name  | e |    request body               |
/// |  (4)  | n |                               |
/// |       |(2)|                               |
/// +-------+---+-------------------------------+

protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length)
{
    return (int)header[offset + 4] * 256 + (int)header[offset + 5];
}

protected override BinaryRequestInfo ResolveRequestInfo(ArraySegment<byte> header, byte[] bodyBuffer, int offset, int length)
{
    return new BinaryRequestInfo(Encoding.UTF8.GetString(header.Array, header.Offset, 4), bodyBuffer.CloneRange(offset, length));
}
  1. Почему два байта и сколько он может содержать? Почему мы взяли пятый байт и умножили его на 256? а затем добавить шестой байт?
  2. Это означает, что сервер должен собирать пакеты в соответствии с протоколом. Как рассчитать длину тела и поместить его в заголовок?

Мое приложение в основном отправляет запрос xml на сервер и получает ответ xml. Но хочу иметь возможность передавать большие файлы по сети. Пожалуйста, помогите мне.

0 ответов

Другие вопросы по тегам