Размер байта пакета - PullRequest
1 голос
/ 23 июня 2011

Я пытаюсь реализовать этот протокол (http://developer.valvesoftware.com/wiki/Source_RCON_Protocol) из приложения C # NET. Часть, применимая там к коду, который я реализую, находится под заголовком "Получение". Однако я не уверен, что у меня правильные размеры байтов, когда построение пакета.

Вот моя функция для создания пакета ...

    private static byte[] ConstructPacket(int request_id, int cmdtype, string cmd)
    {
        MemoryStream stream = new MemoryStream();
        using (BinaryWriter writer = new BinaryWriter(stream))
        {
            byte[] cmdBytes = ConvertStringToByteArray(cmd);
            int packetSize = 12 + cmdBytes.Length;

            // Packet Contents
            writer.Write((int)packetSize); // Byte size of Packet not including This
            writer.Write((int)request_id);  // 4 Bytes
            writer.Write((int)cmdtype);     // 4 Bytes
            writer.Write(cmdBytes);         // 8 Bytes ??

            // NULL String 1
            writer.Write((byte)0x00);
            writer.Write((byte)0x00);

            // NULL String 2
            writer.Write((byte)0x00);
            writer.Write((byte)0x00);

            // Memory Stream to Byte Array
            byte[] buffer = stream.ToArray();

            return buffer;
        }
    }

В соответствии со спецификациями протокола, packageSize - это размер пакета в байтах, не включая самого себя.

Первые 2 (int) сделали бы это 8 байтами ... "CmdBytes", который в данном случае является "testpass", я думаю, будет 8 байт ... Тогда последние 2 строки с нулевым разделителем (если я их установлю правильно) будут 4 байта.

Итак, по моим подсчетам, пакет должен иметь размер 20 байт, но, похоже, он не работает должным образом. Я думаю, что все эти значения должны быть правильными, и правильно ли я устанавливаю строки с разделителями NULL для C # .NET?

Ответы [ 2 ]

0 голосов
/ 01 января 2014

Вам, вероятно, следует позвонить writer.Flush() после последнего writer.Write(). В противном случае вы рискуете избавиться от устройства записи до того, как оно завершит запись всего в поток.

0 голосов
/ 23 июня 2011

Вы пишете два нуля слишком много. Довольно легко увидеть в примерах, все они заканчиваются двумя нулями, а не четырьмя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...