代码如下:
var msg = Encoding.Default.GetString(this.buf.ToArray());
2.完整性判断while (msg.Length > BeginOfLine.Length + EndOfLine.Length)//至少要包含头(2字节)+长度(1字节)+校验(1字节)。
{
if (msg.IndexOf(BeginOfLine) == 0)
{
if (msg.IndexOf(EndOfLine) > 0)
{
this.Raw = new byte[msg.IndexOf(EndOfLine) - BeginOfLine.Length + 1];
this.buf.CopyTo(BeginOfLine.Length, this.Raw, 0, msg.IndexOf(EndOfLine) - BeginOfLine.Length);
this.buf.RemoveRange(0, msg.IndexOf(EndOfLine) + EndOfLine.Length); if (this.buf.Count > 0)
{
msg = Encoding.Default.GetString(this.buf.ToArray());
}
else msg = "";
this.OnGetNew(this.Raw);
}
else
{
break;
}
}
else
{
//这里是很重要的,如果数据开始不是头,则删除数据。
int index = msg.IndexOf(BeginOfLine);
if (index > 0)
{
this.buf.RemoveRange(0, index);
msg = msg.Substring(index,msg.Length- index);
}
else
{
if(this.buf.Count>0)this.buf.RemoveAt(0);
msg = "";
}
}