C# 数据包的字节大小

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

我正在尝试实现这个协议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;
        }
    }
根据协议规范,packetSize是不包括自身的数据包的字节大小

前2个int等于8个字节。。。 cmdBytes,在这个特殊的实例中是testpass,我相信是8个字节。。。 如果我设置正确,那么最后2个空分隔字符串将是4字节


因此,根据我的计算,数据包应该有20个字节大,但它似乎工作不正常。我认为这些值都应该是正确的吗?我是否为C.NET正确设置了空的增量字符串?

您写的两个零太多了。在示例中很容易看到,它们都以两个零结束,而不是四个。

您可能应该在最后一个writer.Write之后调用writer.Flush。否则,您就有可能在写入程序将所有内容写入流之前将其处理掉。

这是什么意思?像这样空字符串1 writer.Writebyte0;writer.Writebyte0;