【发布时间】:2011-09-20 21:35:17
【问题描述】:
我正在尝试从 C# NET 应用程序实现此协议 (http://developer.valvesoftware.com/wiki/Source_RCON_Protocol)。适用于我正在实施的代码的部分位于“接收”标题下。但是,我不确定构造数据包时字节大小是否正确。
这是我构造数据包的函数...
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;
}
}
根据协议规范,packetSize 是不包括自身的数据包的字节大小。
前 2 个 (int) 将使其变为 8 个字节... 我相信在这个特定实例中是“testpass”的“cmdBytes”将是 8 个字节...... 那么最后的 2 个空分隔字符串(如果我设置正确的话)将是 4 个字节。
所以根据我的计算,数据包应该有 20 个字节大,但它似乎不能正常工作。我认为这些值是否都应该正确,我是否为 C# .NET 正确设置了 NULL 分隔字符串?
【问题讨论】: