C# 数据包的字节大小
我正在尝试实现这个协议http://developer.valvesoftware.com/wiki/Source_RCON_Protocol 来自C NET应用程序。适用于我正在实施的代码的部分在标题“接收”下。但是,我不能肯定在构造数据包时字节大小是否正确 这是我构造一个数据包的函数C# 数据包的字节大小,c#,.net,protocols,packet,C#,.net,Protocols,Packet,我正在尝试实现这个协议http://developer.valvesoftware.com/wiki/Source_RCON_Protocol 来自C NET应用程序。适用于我正在实施的代码的部分在标题“接收”下。但是,我不能肯定在构造数据包时字节大小是否正确 这是我构造一个数据包的函数 private static byte[] ConstructPacket(int request_id, int cmdtype, string cmd) { MemorySt
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个字节。。。
cmdBytes,在这个特殊的实例中是testpass,我相信是8个字节。。。
如果我设置正确,那么最后2个空分隔字符串将是4字节
因此,根据我的计算,数据包应该有20个字节大,但它似乎工作不正常。我认为这些值都应该是正确的吗?我是否为C.NET正确设置了空的增量字符串?您写的两个零太多了。在示例中很容易看到,它们都以两个零结束,而不是四个。您可能应该在最后一个writer.Write之后调用writer.Flush。否则,您就有可能在写入程序将所有内容写入流之前将其处理掉。这是什么意思?像这样空字符串1 writer.Writebyte0;writer.Writebyte0;