一种基于数据流传输的数据包提取方法_3

文档序号:9304518阅读:来源:国知局
nt〉=RENEW_LEVEL),则执行步骤4. 0. 5;
[0109] 若队列头位置小于重更新缓存阈值(front<RENEW_LEVEL),执行步骤2 ;
[0110] 步骤4. 0. 5、复制队列尾位置减同步字长度加1 (rear-(PACK_SYNC_LEN-l))位置 同步字长度减1(PACK_SYNC_LEN- 1)个数据到缓存首(buffer)位置,赋值队列头位置等 于缓存首位置(front=buffer),队列尾位置等于队列头位置加同步字长度减1(rear= front+PACK_SYNC_LEN- 1),执行步骤 2 ;
[0111] 步骤4. 1. 1、如图4所示,若当前接收数据的长度大于等于同步字长度加2(recv_ length〉=PACK_SYNC_LEN+2),则执行步骤4. 1. 2 ;
[0112] 若当前接收数据的长度小于同步字长度加2 (reCV_length<PACK_SYNC_LEN+2), 则执行步骤2;
[0113] 步骤4. 1. 2、若数据包位置(package)长度位校验成功,赋值解包进度等于 2(state= 2),然后执行步骤2,
[0114] 若数据包位置(package)长度位校验不成功,赋值解包进度等于0(state= 0),队 列头位置等于队列头位置加1(front=front+l),然后执行步骤2;
[0115] 步骤4. 2. 1、如图5所示,若当前接收数据的长度大于等于同步字长度加数据包位 置的第一个数据
[0116](recv_length>=PACK_SYNC_LEN+package [0]),则执行步骤4. 2. 2 ;
[0117] 若当前接收数据的长度小于同步字长度加数据包位置的第一个数据
[0118](recv_length<PACK_SYNC_LEN+package [0]),则执行步骤2 ;
[0119] 步骤4. 2. 2、若数据包位置(package)数据包校验成功,执行步骤4. 2. 3 ;
[0120] 若数据包位置(package)数据包校验不成功,执行步骤4. 2. 4 ;
[0121] 步骤4. 2. 3、复制数据包位置(package)处数据包位置的第一个数据 (package[0])数目的数据到交换缓存区,设置数据包接收标志,赋值解包进度等于 0 (state= 0),队列头位置等于缓存首位置(front=buffer),队列尾位置等于缓存首位置 (rear=buffer),执行步骤 5;
[0122] 步骤4. 2. 4、赋值解包进度等于0 (state=0),队列头位置等于队列头位置加 1 (front=front+1),执行步骤 2 ;
[0123] 步骤5、退出程序。
[0124] 图6表示发送的数据包,数据内容为"73 79 6E 63 08 80 01 02 03 04 05 F1", 其中"73 79 6E 63"表示同步字,本实施例中为字符串"sync","08"表示数据包长度,本实 施例中表示8个数据,"08"是长度校验位,本实施例的校验方式为(数据包长度+长度校 验位)&0xFF=0x88,符号&表示按位与操作,下同,"01 02 03 04 05"是数据,"F1"是数 据包校验位,本实施例的校验方式为(数据包长度+长度校验位+数据按字节求和+数据 包校验位)&0xFF=0x88。
[0125]图7a和图7b表示接收数据包后,即将执行步骤4. 2. 3时的状态。可以看出, buffer地址为0x20000A90,其存储内容为发送的数据内容,即"73 796E63 08 80 01 02 03 04 05FI";
[0126]front地址为0x20000A90,指向当前正在处理的数据首位置,即发送的数据内容 "73 79 6E63 08 80 01 02 03 04 05Fl";rear地址为 0x20000A9C,执行当前正在处理的 数据的末尾,即是数据包校验位"F1"下一地址;
[0127] sync地址为0x20000A90,指向同步字的起始位置,即指向"73 79 6E 63"数据; package地址为0x20000A94,即指向"08 80 01 02 03 04 05 F1"数据。
[0128] 图8a和图8b表示接收数据包后,步骤4. 2. 3执行完毕后的状态。可以看出,rear 已经指向0x20000A90,表明当前数据包已接收完毕,新的数据可以从缓存首位置开始存储。
【主权项】
1. 一种基于数据流传输的数据包提取方法,其特征在于,一种基于数据流传输的数据 包提取方法具体是按照以下步骤进行的: 步骤1、初始化各变量,执行解包进度等于0,队列头位置等于缓存首位置,队列尾位置 等于缓存首位置,同步字位置等于空值,数据包位置等于空值; 步骤2、若接收队列中存在数据,则读取接收数据,赋值队列尾位置的数据等于接收数 据,队列尾位置等于队列尾位置+1,当前接收数据的长度等于队列尾位置减去队列头位置, 执行步骤3; 若接收队列中不存在数据,则执行步骤5; 步骤3、判断解包进度值,若解包进度等于0,执行步骤4. 0. 1 ; 若解包进度等于1,执行步骤4. I. 1 ; 若解包进度等于2,执行步骤4. 2. 1 ; 步骤4. 0. 1、若当前接收数据的长度大于等于同步字长度,则执行步骤4. 0. 2, 若当前接收数据的长度小于同步字长度,则执行步骤2 ; 步骤4. 0.2、在队列头位置到队列尾位置之间寻找同步字,若寻找到,设寻找到的位置 为寻找到的同步字位置,执行步骤4. 0. 3 ; 若没寻找到,执行步骤4. 0.4; 步骤4. 0. 3、赋值解包进度等于1,同步字位置等于寻找到的同步字位置,数据包位置 等于同步字位置加同步字长度,执行步骤2 ; 步骤4. 0. 4、赋值队列头位置等于队列头位置加1,若队列头位置大于等于重更新缓存 阈值,则执行步骤4. 0. 5; 若队列头位置小于重更新缓存阈值,执行步骤2; 步骤4. 0. 5、复制队列尾位置减同步字长度加1位置同步字长度减1个数据到缓存首位 置位置,赋值队列头位置等于缓存首位置,队列尾位置等于队列头位置加同步字长度减1, 执行步骤2; 步骤4. 1. 1、若当前接收数据的长度大于等于同步字长度加2,则执行步骤4. 1. 2; 若当前接收数据的长度小于同步字长度加2,则执行步骤2; 步骤4. 1. 2、若数据包位置长度位校验成功,赋值解包进度等于2,然后执行步骤2, 若数据包位置长度位校验不成功,赋值解包进度等于〇,队列头位置等于队列头位置加 1,然后执行步骤2; 步骤4.2. 1、若当前接收数据的长度大于等于同步字长度加数据包位置的第一个数据, 则执行步骤4. 2. 2; 若当前接收数据的长度小于同步字长度加数据包位置的第一个数据,则执行步骤2; 步骤4. 2. 2、若数据包位置数据包校验成功,执行步骤4. 2. 3; 若数据包位置数据包校验不成功,执行步骤4. 2. 4; 步骤4. 2. 3、复制数据包位置处数据包位置的第一个数据数目的数据到交换缓存区,设 置数据包接收标志,赋值解包进度等于〇,队列头位置等于缓存首位置,队列尾位置等于缓 存首位置,执行步骤5; 步骤4. 2. 4、赋值解包进度等于0,队列头位置等于队列头位置加1,执行步骤2; 步骤5、退出程序。
【专利摘要】一种基于数据流传输的数据包提取方法,本发明涉及基于数据流传输的数据包提取方法。本发明的目的是为了解决现有系统资源占用大、运算量大以及因硬件故障造成的数据包串位现象的问题。通过以下技术方案实现的:1、初始化各变量;2、若接收队列中存在数据则判断解包进度值,若0执行3,若1执行4,若2执行5;3、搜索同步字,若搜索到执行4,否则删除首数据执行2,判断缓存更新条件,满足则更新缓存;4、校验长度,成功执行5,否则删除首数据执行2;5、校验数据包,成功执行6,否则执行2;6、退出程序。本发明应用于通信技术领域。
【IPC分类】G06F13/42
【公开号】CN105022712
【申请号】CN201510341854
【发明人】陈兴林, 李松, 高怡然, 罗文嘉, 徐川川, 于志亮, 崔宁, 李松峰, 耿光晓
【申请人】哈尔滨工业大学
【公开日】2015年11月4日
【申请日】2015年6月18日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1