Я пытаюсь реализовать этот протокол (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?