第一次对接单片机,怎么按照文档描述下达指令?
我直接发送文档给的例子没有效果,但我保证自己写的客户端是能够与服务端通信的我自己写了一个demo;我感觉就是没按照格式发送才导致这样的结果,请问怎么发送文档描述的格式来请求?麻烦写一个请求的例子!!
第一次对接单片机,怎么按照文档描述下达指令?
我直接发送文档给的例子没有效果,但我保证自己写的客户端是能够与服务端通信的我自己写了一个demo;我感觉就是没按照格式发送才导致这样的结果,请问怎么发送文档描述的格式来请求?麻烦写一个请求的例子!!
随手写一个,环境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的数)