int len = buffer[2];//数据长度
//数据完整判断第一步,长度是否足够
//len是数据段长度,4个字节是while行注释的3部分长度
if (buffer.Count < len + 4) break;//数据不够的时候什么都不做
//这里确保数据长度足够,数据头标志找到,我们开始计算校验
//2.3 校验数据,确认数据正确
//异或校验,逐个字节异或得到校验码
byte checksum = 0;
for (int i = 0; i < len + 3; i++)//len+3表示校验之前的位置
{
checksum ^= buffer[i];
}
if (checksum != buffer[len + 3]) //如果数据校验失败,丢弃这一包数据
{
buffer.RemoveRange(0, len + 4);//从缓存中删除错误数据
continue;//继续下一次循环
}
//至此,已经被找到了一条完整数据。我们将数据直接分析,或是缓存起来一起分析
//我们这里采用的办法是缓存一次,好处就是如果你某种原因,数据堆积在缓存buffer中
//已经很多了,那你需要循环的找到最后一组,只分析最新数据,过往数据你已经处理不及时
//了,就不要浪费更多时间了,这也是考虑到系统负载能够降低。