C# Socket tcp请求,怎么按照别人文档发送数据包??

第一次对接单片机,怎么按照文档描述下达指令?

img

我直接发送文档给的例子没有效果,但我保证自己写的客户端是能够与服务端通信的我自己写了一个demo;我感觉就是没按照格式发送才导致这样的结果,请问怎么发送文档描述的格式来请求?麻烦写一个请求的例子!!

img

随手写一个,环境net4.62
库:System.Buffers ,如果没有请nuget

public class XXProtocol
{
    private static int PackageIndex = 0;
    private static readonly object lockobj = new object();
    /// <summary>
    /// 因为是展示我也不打算给这个协议封啥对象了,单纯
    /// 就事论事写个编码方法,参数也是就事论事的这么写
    /// </summary>
    /// <param name="packagetype"></param>
    /// <param name="json"></param>
    /// <param name="encoding"></param>
    /// <returns></returns>
    public static ReadOnlySpan<byte> Encode(int packagetype, string json, Encoding encoding)
    {

        json = json.ToLower();
        var databuffer = encoding.GetBytes(json);
        var datalength = databuffer.Length;
        var buffer = new byte[datalength + 8];
        using (MemoryStream ms = new MemoryStream(buffer))
        {
            using (BinaryWriter writer = new BinaryWriter(ms))
            {
                writer.Write('V');
                writer.Write('Z');
                writer.Write((byte)packagetype);

                lock (lockobj)
                {
                    PackageIndex = PackageIndex & 0xff;
                    byte index = (byte)PackageIndex;
                    writer.Write(index);

                    PackageIndex++;
                } 
                //先跳过数据区长度,后面直接写
                ms.Seek(4, SeekOrigin.Current);
                writer.Write(databuffer);
             
            }
        }

        //这个数据长度我就直接网buffer写把
        var buffer1 = buffer.AsSpan(4);
        System.Buffers.Binary.BinaryPrimitives.WriteInt32BigEndian(buffer1, datalength);
        return buffer;



    }

}

虽然代码很多,但是也没啥核心代码,填充byte[]的手段也很多,我只是随便挑了一个writer,你明白意思就号
里面其实就只有3个地方需要说明
1.json不知道编码,一般是utf8,但是谁知道对方怎么想,所以编码你需要询问对方
2.包索引序号,也没啥可说的,只是注意需要使用原子类操作
3.数据区长度,按文档就是uint32的大端字节方式,这里我直接用int32理论也无问题,反正文档说了他也不认过大数(我估计他也不认小于0的数)

这种格式很好处理,长度确定,结构确定,定义结构体啊,把数据填到结构体里,然后把整个结构体一起发送出去就是了。
因为是和不同架构的处理器通讯,注意一下多字节整形数据的大小端问题。