后装机-判断报文的正确性的分析思想
来源:互联网 发布:深圳益玩网络 编辑:程序博客网 时间:2024/04/30 19:21
后装机-判断报文的正确性的分析思想
思想:收到一个报文后,
若ReceiveLength大于一个RealLength,就用ReceiveLength减去RealLength,得到MoreLength;首先根据RealLength的值得到该报文中正确的部分并放入RealStrtemp,再根据MoreLength值,取得刚刚收到报文的多余部分并放入LeftTelBuf[],等下一次再接收到报文时,先将该报文加上LeftTelBuf[]而后再做判断。
若ReceiveLength小于一个RealLength,根据ReceiveLength值,将刚刚收到的报文放入LeftTelBuf[],等待下一次再接收到报文时,先将该报文加上LeftTelBuf[]而后再做判断。
例:自定义报文:FT001、FT002、FT003、FT004、FT005 ...
RealLength = 5;MoreLength = 0;RealLength = 0;
1)收到Strtemp={”FT001FT0”};
ReceiveLength=8;->MoreLength=8-5=3;->RealStrtemp={“FT001”};->LeftTelBuf[]={“FT0”};
2)收到Strtemp={”02FT00”};
Strtemp=LeftTelBuf[]+Strtemp={“FT002FT00”};->ReceiveLength=9;->MoreLength=9-5=4;->RealStrtemp={“FT002”};->LeftTelBuf[]={“FT00”};
3)收到Strtemp={“3FT0”};
Strtemp=LeftTelBuf[]+Strtemp={“FT003FT0”};->ReceiveLength=8;->MoreLength=8-5=4;->RealStrtemp={“FT003”};->LeftTelBuf[]={“FT0”};
4)收到Strtemp={“0”};
Strtemp=LeftTelBuf[]+Strtemp={“FT00”};->由于此时报文的长度小于5,所以还是将其放入到LeftTelBuf中->LeftTelBuf=Strtemp={“FT00”};->继续接收下一个报文
5)收到Strtemp={“4FT005”};
Strtemp=LeftTelBuf[]+Strtemp={“FT004FT005”}->ReceiveLength=10->MoreLength=10-5=5;->(假如MoreLength=5了,正好是一个正确的报文,怎么办???)->RealStrtemp={“FT004”};->LeftTelBuf[]={“FT005”};
……
程序里是这样写的
int LeftTelNum = 0; char LeftTelBuf[20]; #define ONETELLEN 10;
OnOnCommMscomm()函数
if(m_Comm232.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
strtemp=m_Comm232.GetInput().bstrVal; //读接收缓冲区数据
TTel *RcvTel=new TTel;
RcvTel->Length=strtemp.GetLength()+LeftTelNum; //取缓冲区报文长度
int i;
for(i=0;i<LeftTelNum;i++)/*第一次LeftTelNum是为0的,所以该循环是不运行的;而当LeftTelNum有值时(意味着收到大于一次的错误报文)*/
RcvTel->Tel[i]=LeftTelBuf[i];/*Strtemp是一个空报文,在它里面先写入上一次多出的报文LeftTelBuf []的内容*/
for(i=LeftTelNum;i<RcvTel->Length;i++)
RcvTel->Tel[i]=strtemp.GetAt(i-LeftTelNum);/*在上面Strtemp已经加入过LeftTelBuf []的内容,这里在它后面再加上此次接收到的报文,就是思想里所说的Strtemp=LeftTelBuf[]+Strtemp */
DoRecvTel(RcvTel);//将Tel[]送去处理
delete(RcvTel);
}
DoRecvTel(TTel *BuffTel)函数
while(BuffTel->Length>0)
{
/*当Tel[]<20 并且 Tel[]>=10 时*/
if(BuffTel->Length<2*ONETELLEN&&BuffTel->Length>=ONETELLEN)
{
LeftTelNum=BuffTel->Length-ONETELLEN;/*得到多余的长度*/
int i;
for(i=0;i<LeftTelNum;i++)
LeftTelBuf[i]=BuffTel->Tel[ONETELLEN+i];/*根据多余的长度,取得多余的报文,放入LeftTelBuf []中,等待下次接收到报文时使用*/
return;
}
/*当Tel[]<10时*/
if(BuffTel->Length<ONETELLEN)
{
LeftTelNum=BuffTel->Length;
int i;
for(i=0;i<LeftTelNum;i++)
LeftTelBuf[i]=BuffTel->Tel[i];/*将其放入LeftTelBuf ,等待下一次的报文*/
return;
}
}
- 后装机-判断报文的正确性的分析思想
- 判断身份证号码的正确性源码
- JAVA 判断身份证的正确性
- 用sscanf判断ip地址的正确性
- JS判断输入日期的正确性
- JS判断输入日期的正确性
- JS判断输入日期的正确性
- 关于dijkstra的贪心思想的正确性的证明
- 怎样测试数据分析结果的正确性
- 左偏树的正确性和复杂度分析
- ubuntu的装机后恢复系统
- win10重新装机后的一点配置
- centos7 装机后的基本配置
- JS判断两种格式的输入日期的正确性
- 日期的正确性判断(不用Date和Calender)
- 剑指offer--入栈、出栈正确性的判断
- 无线报文的简单分析
- 无线报文的简单分析
- J2EE Architecture(11)
- mysql的中文问题
- tomcat 虚拟主机配置
- 关于java构造器的一些总结
- c#操作word表格
- 后装机-判断报文的正确性的分析思想
- ASP.NET 2.0后台代码与内联代码的对比(2)
- asp图片上传至数据库代码
- 网上书店系统 书籍分页功能
- ASP上传代码? 在本机上调试成功,在网络上就不行了
- tasks
- 一个多线程后台扫描的程序和源代码
- (转)断言的一些知识
- :.net 收藏一段小的.net下的验证码片段