【技术实现步骤摘要】
一种基于关联容器map的报文协议超时重发方法及系统
[0001]本专利技术涉及一种基于关联容器map的报文协议超时重发方法,属于计算机控制领域。
技术介绍
[0002]在多个分系统互联的大型系统中,系统间数据通过总线进行交互。在交互过程中由于干扰、故障等原因会导致错帧、乱帧、丢帧等现象,造成了系统间数据交互的失败,一些重要数据交互失败容易导致整个系统运行的失败。因此,系统间通讯过程中重要的交互数据通常需要接收确认,传统的应答方法通常采用线性表的方式对报文重发进行管理,例如在一个数组中标记出哪些报文已经发送但还未收到应答,并通过计数器进行超时未应答计数,超时后根据全局变量记录的报文内容进行重发操作。通常采用数组标记的方式进行管理,对于不同的报文类型,报文发送后在数组中标记是否需要应答,对于不断增加需要应答的报文数量,数组的长度需要不断增加,代码框架也需要改变,同时使用一个定时器进行计数来管理若干需要应答的报文,这种管理方式容易出错。在报文重发时,需要确定重发报文的目的地址、内容、长度等信息,这些信息一般为全局共有变量,从报文第一次发送到应答期间数据的值可能被篡改,致使两次发送数据内容并非完全一致,导致最终数据出现错误。
技术实现思路
[0003]本专利技术的技术解决问题是:克服现有技术的不足,提供了一种基于关联容器map的报文协议超时重发方法。
[0004]本专利技术的技术解决方案是:
[0005]一种基于关联容器map的报文协议超时重发方法,步骤如下:
[0006](1)设计系 ...
【技术保护点】
【技术特征摘要】
1.一种基于关联容器map的报文协议超时重发方法,其特征在于步骤如下:(1)设计系统间报文协议,包括发送报文协议和接收确认报文协议,且均为变长协议,报文接收方接收到报文后回复接收确认报文,发送报文和接收确认报文以帧序号为唯一标识进行关联;(2)使用步骤(1)所设计的系统间报文协议进行通信,使用关联容器MAP对发送报文进行管理;关联容器MAP存储所发送报文的帧序号和重发管理结构体MainReSend变量信息;(3)在报文发送线程使用重发管理结构体MainReSend对发送报文进行管理并将帧序号和重发管理结构体MainReSend存储到关联容器MAP中;(4)在报文接收线程,处理接收确认报文,根据接收确认报文的帧序号,在关联容器MAP中遍历查询该帧序号,将查找到的重发管理结构体中的是否重发标志设置为否;(5)设置重发管理定时器,在重发管理定时器中周期对关联容器MAP变量gSndQ中键进行遍历,对不需进行管理的键值对进行删除;(6)对步骤(5)中所有是否重发标志IsReSnd为TRUE的关联容器MAP元素进行管理;(7)每进行一次重发操作将重发管理结构体中已重发次数进行加一操作,当已重发次数达到需要重发的次数时,将该键值对从关联容器中移除。2.根据权利要求1所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:所述发送报文协议包括帧头FrmHead、帧序号FrmNum、帧长度FrmLen、帧类型FrmType、目的地址FrmDst、源地址FrmSrc、应答标识FrmACKFlag、功能码FrmCode、负载内容FrmContent、和校验FrmChk、帧尾FrmTail;帧头FrmHead长度为两个字节,帧头具有可标识性;帧序号FrmNum长度为四个字节,发送报文和接收确认报文通过帧序号FrmNum进行关联;帧长度FrmLen长度为两个字节,该长度包括从帧头到帧尾的所有字节数;帧类型FrmType长度为两个字节,表示该帧数据的类型;目的地址FrmDst长度为四个字节,该值为接收方的IP地址值;源地址FrmSrc长度为四个字节,该值为发送方的IP地址值;应答标识FrmACKFlag长度为两个字节,表示该发送帧是否需要应答,如果这两个字节为0xFF00则表示此帧需要应答,如果为0x00FF则表示此帧不需要应答;功能码FrmCode长度为两个字节,功能码表示帧所传递的有效数据内容;负载内容FrmContent所具有的字节数不固定,表示实际传输数据的内容;校验FrmChk长度为两个字节,检验方式采用和校验方式;帧结尾FrmTail为两个字节;接收确认报文协议与发送报文协议完全一致,仅负载内容FrmContent为固定字节数。3.根据权利要求2所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:定义关联容器MAP变量,关联容器中的键值对分别为帧序号和重发管理结构;重发管理结构包括目的地址、所要发送的数据指针、所要发送数据的长度、是否重发标志、发送次数计数、需要重发的次数。4.根据权利要求2所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:所述使用关联容器MAP对发送报文进行管理,具体为:(2.1)设计重发管理结构体MainReSend,此结构的成员变量包括
①
发送报文的目的地址DstAddr,类型设置为整型;
②
需要发送的数据地址DataAddr,类型设置为整型指针类型,该地址指向存储数据的内存;
③
需要发送的数据长度DataLen,类型设置为短整形;
④
是否重发标志IsReSnd,类型设置为布尔型,TURE表示需要重发值设置为1,FALSE表示不需要重
发,值设置为0;
⑤
已重发次数CNT,类型设置为无符号整型;
⑥
需要重发次数NCNT,类型设置为整型;此值如果设置为0则表示不需要重发;
⑦
计数器COUNT,该变量记录重发超时次数;(2.2)定义一个关联容器MAP变量gSndQ,其中键key的类型设置为整型,这个值记录发送帧的帧序号FrmNum,发送报文和接收确认报文通过帧序号FrmNum进行关联,值value设置为重发管理结构体MainReSend类型。5.根据权利要求4所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:所述步骤(3)在报文发送线程使用重发管理结构体MainReSend对发送报文进行管理并将帧序号和重发管理结构体MainReSend存储到关联容器MAP中,具体为:(3.1)在报文发送过程,报文内容填充完后,判断应答标识FrmACKFlag是否为0xFF00,如果为0xFF00则进行重发管理,如果为0x00FF,则不做处理;(3.2)定义...
【专利技术属性】
技术研发人员:王雨龙,
申请(专利权)人:天津津航计算技术研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。