基于多带图灵机的实时数据链路字节流防错方法与流程

文档序号:27775553发布日期:2021-12-04 09:54阅读:127来源:国知局
基于多带图灵机的实时数据链路字节流防错方法与流程

1.本发明涉及通信技术领域,尤其涉及一种基于多带图灵机的实时数据链路字节流防错方法。


背景技术:

2.tcp/ip协议是计算机之间常用的一种组网形式,包含链路层、网络层、传输层和应用层。四个分层分别对应计算机网络内硬件设备、数据帧选路、数据包分组和应用程序的通信细节以及控制功能。在不同型号、不同操作系统的计算机上,应用程序使用tcp/ip协议在传输层建立可靠的实时数据链路,再通过字节流完成数据交换,从而实现计算机网络内的服务请求和响应。字节流的具体内容和读写方法由tcp/ip应用层的具体场景或通信协议规定。
3.现有的tcp/ip应用层字节流数据交换方法可概述为如图1所示的读取和写入两个流程。读取流程首先将数据链路传输的字节流存入程序的通信缓存,再根据应用层通信协议处理有效数据;写入流程根据应用层通信协议将有效数据转化为字节流,再写入通信缓存由数据链路传输。
4.根据协议的规定,所有有效数据在通信缓存内占用固定的字节长度并具有唯一的数据编号。应用层通信协议还规定了不同类型有效数据在通信缓存中的排序,使得tcp/ip应用程序能够按照固定的顺序和信息格式来控制网络数据的读写行为。
5.通信缓存中的有效数据类型和读写方式可总结为表1,表1是tcp/ip应用程序控制通信缓存的具体方法,通常由软件开发人员根据应用层协议的规定直接编码写入程序。
[0006][0007]
表1不同类型数据的读写方式说明
[0008]
tcp/ip协议是面向数据链路的传输层服务,通信缓存内字节流的读写由应用层控制。在现有技术中,当计算机网络连接不稳定或通信软件出现故障时,通信缓存内将出现无效字节流。由于现有技术设计的tcp/ip应用程序无法在读写字节流的同时执行数据有效性的判定和防错流程,无效字节流会对应用层的数据交换产生严重的干扰,导致应用程序出现非设计预期的行为甚至崩溃的后果。


技术实现要素:

[0009]
本发明的目的是提供一种基于多带图灵机的实时数据链路字节流防错方法,能够
从接收端角度进行无效字节流的检出以及失效

可运作导向。
[0010]
本发明的目的是通过以下技术方案实现的:
[0011]
一种基于多带图灵机的实时数据链路字节流防错方法,包括:
[0012]
构建多带图灵机,通过所述多带图灵机的状态转移函数进行通信缓存的读写操作,以及在读写操作中或者读写操作之前检测无效字节流,当检测到无效字节流时,返回读取操作起始状态或者跳过相关字节;将状态转移函数按照功能划分为五个子程序:main、mark、pullsym、readlen与readran;其中:
[0013]
main子程序,用于处理多带图灵机读写操作的起始和终止状态,当处理完读写操作的起始状态后转入pullsym子程序;
[0014]
pullsym子程序,用于在读操作中从所述多带图灵机的数据符号栈中拉取数据符号,并根据数据类型标识进入readlen子程序、readran子程序或者mark子程序,或者返回main子程序;还用于在写操作中,从所述多带图灵机的数据符号栈中拉取数据符号,并进入mark子程序;
[0015]
mark子程序,用于在读操作中,根据数据类型标识在通信缓存带上标记数据符号,以及通过有效性判定来检测无效字节流,如果通过有效性判定,则将有效数据读取至应用程序的数据符号中,再返回至pullsym子程序,或者标记数据符号并完成数据读取后返回至main子程序,进入终止状态;还用于在写操作中,根据数据类型标识在通信缓存带上标记数据符号,再通过运算符获取有效数据的值后返回至pullsym子程序,或者标记数据符号后写入相应数据,再返回至pullsym子程序;
[0016]
readlen子程序为字长数据、协议标记及长度数据的读取程序,当完成字长数据、协议标记或长度数据的标记后,通过有效性判定来检测无效字节流,如果通过有效性判定,则将有效数据读取至应用程序的数据符号中,再返回至pullsym子程序;
[0017]
readran子程序为循环数据的读取程序,完成循环数据的标记后,通过有效性判定来检测无效字节流,如果通过有效性判定,则将有效数据读取至应用程序的数据符号中,循环数据读取完毕后返回至pullsym子程序。
[0018]
由上述本发明提供的技术方案可以看出,整个方案不仅具备传统的通信缓存数据读取和写入功能,还能够从接收端角度进行无效字节流的检出以及失效

可运作导向,从而避免了非法数据、异常数据和长度错误数据对应用层数据交换产生的干扰,对程序起到保护作用。
附图说明
[0019]
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。
[0020]
图1为本发明背景技术提供的tcp/ip应用层字节流数据的交换方法的示意图;
[0021]
图2为本发明实施例提供的一种基于多带图灵机的实时数据链路字节流防错方法的流程图;
[0022]
图3为本发明实施例提供的应用层通信协议有效数据的数据组关系示意图;
[0023]
图4为本发明实施例提供的通信缓存读写流程的多带图灵机模型示意图;
[0024]
图5为本发明实施例提供的多带图灵机的状态转移流程图。
具体实施方式
[0025]
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。
[0026]
首先对本文中可能使用的术语进行如下说明:
[0027]
术语“和/或”是表示两者任一或两者同时均可实现,例如,x和/或y表示既包括“x”或“y”的情况也包括“x和y”的三种情况。
[0028]
术语“包括”、“包含”、“含有”、“具有”或其它类似语义的描述,应被解释为非排它性的包括。例如:包括某技术特征要素(如原料、组分、成分、载体、剂型、材料、尺寸、零件、部件、机构、装置、步骤、工序、方法、反应条件、加工条件、参数、算法、信号、数据、产品或制品等),应被解释为不仅包括明确列出的某技术特征要素,还可以包括未明确列出的本领域公知的其它技术特征要素。
[0029]
下面对本发明所提供的一种基于多带图灵机的实时数据链路字节流防错方法进行详细描述。本发明实施例中未作详细描述的内容属于本领域专业技术人员公知的现有技术。本发明实施例中未注明具体条件者,按照本领域常规条件或制造商建议的条件进行。
[0030]
如图2所示,一种基于多带图灵机的实时数据链路字节流防错方法,包括如下步骤:
[0031]
1、构建多带图灵机。
[0032]
2、通过所述多带图灵机的状态转移函数进行通信缓存的读写操作,以及在读写操作中或者读写操作之前检测无效字节流。
[0033]
3、当检测到无效字节流时,返回读取操作起始状态或者跳过相关字节。
[0034]
本发明实施例中,将状态转移函数按照功能划分为五个子程序:main、mark、pullsym、readlen与readran;其中:
[0035]
main子程序,用于处理多带图灵机读写操作的起始和终止状态,当处理完读写操作的起始状态后转入pullsym子程序;
[0036]
pullsym子程序,用于在读操作中从所述多带图灵机的数据符号栈中拉取数据符号,并根据数据类型标识进入readlen子程序、readran子程序或者mark子程序,或者返回main子程序;还用于在写操作中,从所述多带图灵机的数据符号栈中拉取数据符号,并进入mark子程序;
[0037]
mark子程序,用于在读操作中,根据数据类型标识在通信缓存带上标记数据符号,以及通过有效性判定来检测无效字节流,如果通过有效性判定,则将有效数据读取至应用程序的数据符号中,再返回至pullsym子程序,或者标记数据符号并完成数据读取后返回至main子程序,进入终止状态;还用于在写操作中,根据数据类型标识在通信缓存带上标记数据符号,再通过运算符获取有效数据的值后返回至pullsym子程序,或者标记数据符号后写入相应数据,再返回至pullsym子程序;
[0038]
readlen子程序为字长数据、协议标记及长度数据的读取程序,当完成字长数据、协议标记或长度数据的标记后,通过有效性判定来检测无效字节流,如果通过有效性判定,则将有效数据读取至应用程序的数据符号中,再返回至pullsym子程序;
[0039]
readran子程序为循环数据的读取程序,完成循环数据的标记后,通过有效性判定来检测无效字节流,如果通过有效性判定,则将有效数据读取至应用程序的数据符号中,循环数据读取完毕后返回至pullsym子程序。
[0040]
本发明实施例中,所述无效字节流包括:非法数据、异常数据以及长度错误数据。
[0041]
其中,非法数据包括:字节流内不在通信协议规定有效范围内的数据;异常数据包括:字节流内能够导致操作系统强制关闭应用程序的数据;长度错误数据包括:字节流记录的数据长度与实际长度不一致的数据;
[0042]
所述非法数据与异常数据在读写操作中通过读写操作中的有效性判定来检测(具体将方式将在后文进行介绍);所述长度错误数据则在读写操作之前进行检测,检测时的执行流程与读操作流程一致,如果长度计算带b6在字节流全部标记完成前存储内容为0,或字节流全部标记完成后存储内容不为0,则表示检测出长度错误数据(具体将方式将在后文进行介绍)。
[0043]
本发明实施例上述方案,不仅具备传统的通信缓存数据读取和写入功能,还能够从接收端角度进行无效字节流的检出以及失效

可运作导向,从而避免了非法数据、异常数据和长度错误数据对应用层数据交换产生的干扰,对程序起到保护作用。
[0044]
为了更加清晰地展现出本发明所提供的技术方案及所产生的技术效果,下面从通信缓存读写流程分析、通信缓存读写流程的数学模型以及原理这三个方面对本发明做详细的介绍。
[0045]
一、通信缓存读写流程分析。
[0046]
目前,应用层通信协议定义的有效数据通常按照类型码分为不同的数据组,数据组是多个有效数据组成的有序数列,排序依据是应用层通信协议规定的数据编号。不同数据组之间的关系可表述为如图3所示的树状结构,该数据结构称为协议树。
[0047]
图3中每个数据组在树中的位置可以由类型码构成的序列确定,并且单条路径下所有组内的数据编号满足接续关系。位于根节点的数据组通常包含字节流长度字段。读取和写入通信缓存的有效数据可抽象表述为应用程序内可操作的数据符号。数据符号能够存储数据并自动记录存入时间,有效数据类型由通信协议指定,并可通过运算符获取属性信息。表2是数据符号的运算符和函数说明,由于数据符号可被应用程序直接操作,表中所述的函数和运算符在字节流算法中可用。
[0048][0049]
表2数据符号的函数和运算符说明
[0050]
二、通信缓存读写流程的数学模型。
[0051]
本发明实施例提供应用程序的通信缓存读写流程如表3所示。
[0052][0053]
表3应用程序的通信缓存读写流程
[0054]
在读取和写入流程中,通信缓存的加载、清空以及数据复制在应用程序中容易实现,如何在已知条件下将通信缓存标记为数据符号是字节流防错算法的难点。通信缓存读写流程的数学模型可形式化表述为满足特定规格的多带图灵机m,如图4所示,主要包括:控制器、数据符号栈、数据缓冲栈、协议位置栈、字长缓冲带、循环计算带以及长度计算带。多带图灵机通过状态转移函数将通信缓存标记为数据符号。
[0055]
1)所述控制器,用于存储多带图灵机状态转移函数的状态变量,控制各子程序之间的转换,每一子程序在执行每一流程后都输出相应的状态变量以及输入变量;其中,所述状态变量包括:主状态、数据类型标识、数据符号栈状态、数据缓冲栈状态和协议位置栈状态(后四个均为拓展状态),所述主状态包括多带图灵机的就绪状态、读取状态和写入状态;所述输入变量包括:控制器当前指向的通信缓冲带位置、字长缓冲带的数值和循环计算带
的数值。
[0056]
2)字长缓冲带b2、循环计算带b4和长度计算带b6用于临时存储读写过程中使用的局部变量,带内的每个格代表单个字节的存储空间。局部变量具体包含的内容可概述为
[0057]
表4。
[0058][0059]
表4读写过程中使用的局部变量
[0060]
3)数据符号栈e1的每个格代表单个数据符号,数据符号是应用程序内部存储有效数据的数据结构,数据缓冲栈e3和协议位置栈e5用于临时存储字节流,每个格代表单个字节。
[0061]
此外,图4中的通信缓存带b0对应通信缓存,每个格代表缓存中的单个字节。
[0062]
本发明实施例中,所述多带图灵机使用七元组形式定义,表示为:
[0063]
m=(q,σ,γ,δ,q0,c,f)
[0064]
其中:
[0065]
m表示多带图灵机。
[0066]
q为多带图灵机状态集合是由五个状态分量构成的有序对。q0、q1、q2依次表示就绪状态、读取状态、写入状态,t0、t1、t3、t4、t5、t
b
是数据类型标识,分别表示就绪、定长数据、字长数据、变长数据、循环数据、协议标记、长度数据、空数据,后三个分量分别对应数据符号栈e1、数据缓冲栈e3和协议位置栈e5的状态,i、e、ε是线性栈的状态标识,分别表示入栈、出栈和不操作,考虑到如果通过角标来区分线性栈的状态标识,则状态函数将无法完整表述多个线性栈的状态,因此,文中括号[,,
·
,
·
,
·
]中的不同线性栈状态通过填入位置的不同来进行区分,即依次对应数据符号栈e1、数据缓冲栈e3和协议位置栈e5。
[0067]
σ为输入数据符号的有穷集合是由四个输入变量构成的有序对;β
b
表示空白符号,在通信缓存带b0上表示该格未加载字节流,加载字节流后的通信缓存带符号由β0表示;字长缓冲带b2、循环计算带b4和长度计算带b6上的所有字节能够等效转化为整数,三者的输入内容分别记为指代内容为所有非负整数。
[0068]
γ为带符号的完整集合α表示数据符号,代表通信缓存带上的字节与应用程序内部存储的有效数据形成匹配关系;β
b
在字长缓冲带b2、循环计算带b4和长度计算带b6上表示初始化状态。
[0069]
δ是多带图灵机的状态转移函数,作用是定义通信缓存读写的正常状态。
[0070]
q0是多带图灵机的初始状态集合{([q0,t0,ε,ε,ε],β
b

b

b

b
),([q0,t0,i,ε,ε],β
b

b

b

b
)},两者分别表示通信缓存开始数据读取和写入前的图灵机状态,初始状态由应用程序自动设置,与线性栈的状态类似的,文中括号([],
·
,
·
,
·
,
·
)中各缓存带与计算带的状态通过符号的填入位置的不同来进行区分,四个位置的β
b
依次对应通信缓存带b0、字长缓冲带b2、循环计算带b4和长度计算带b6,γ中的β
b
如此;值得注意的是,具体的位置先后顺序也可以由本领域技术人员根据实际情况或者经验进行调整,此处提供的是一种可行的示例。
[0071]
c为通信缓存带b0、字长缓冲带b2、循环计算带b4和长度计算带b6中使用的空白符号集合{β
b
}。
[0072]
f是多带图灵机的终止状态集合{([q0,t
b
,ε,ε,ε],β
b

b

b

b
)},是图灵机完成通信缓存数据读取或写入后的最终状态。
[0073]
三、工作原理。
[0074]
如之前所述,本发明实施例中,多带图灵机的状态转移函数可以分为五个子程序:main、mark、pullsym、readlen、readran,其中,main子程序处理图灵机读写操作的起始和终止状态;mark子程序用于在通信缓存带上标记数据符号;pullsym子程序的用途是从数据符号栈中拉取数据符号;readlen子程序是字长数据和协议标记的读取程序;readran子程序是循环数据的处理程序。上述五个子程序内部及子程序之间的交互关系可表述为如图5所示的流程图。
[0075]
图5所示的流程图整体包含了通信缓存的读取和写入流程,读取流程从(1)开始,自(6)结束,写入流程从(7)开始,自(8)结束。当多带图灵机的状态没有编号对应时,即可判定控制器指向了无效字节流。无效字节流自接收端检出后,应用程序以保持运作状态为目的进行失效

可运作导向,方法为强制回到读取流程的初始状态(1),或跳过当前字节,再记录错误日志。发送端的数据不进行无效字节流检查。
[0076]
图5中的数字是状态转移函数的流程编号。状态转移函数由状态变量和输入变量构成,状态变量包括主状态、数据类型标识、数据符号栈状态、数据缓冲栈状态和协议位置栈状态,输入变量包括控制器当前指向的通信缓冲带位置、字长缓冲带的数值和循环计算带的数值。每个步骤执行完成后,输出的内容为状态变量和输入变量构成的多元组。控制器能够在通信缓存带b0上移动,移动的方向由多元组最后一个变量标注,s表示不移动,r表示向右移动。通信缓存带b0在加载前每格都为空白符号β
b
。在步骤说明中,l2、l4和l6分别表示字长缓冲带b2、循环计算带b4和长度计算带b6中的非零数据,满足关系l2>0、l4>0和l6>0。
[0077]
下面结合图5对各个子程序的步骤流程进行介绍。
[0078]
1、main子程序。
[0079]
main子程序包括:读操作的步骤与写操作的步骤;其中:
[0080]
1)所述读操作的步骤包括:
[0081]
步骤1、δ([q0,t0,ε,ε,ε],β
b

b

b

b
)=([q0,t0,ε,ε,i],β0,0,0,0,s),进入读操作的初始状态,通信缓存带b0加载字节流,字长缓冲带b2和循环计算带b4的存储内容预置为0,控制器不移动。
[0082]
步骤1对应与图5中的流程(1),后续步骤的编号与图5中的流程编号一一对应。
[0083]
上述式子中,左侧中括号的五个状态分量对应前述七元组中的多带图灵机状态集
合q,依次表示图灵机就绪、数据类型标识就绪、数据符号栈e1不操作、数据缓冲栈e3不操作、协议位置栈e5不操作;
[0084]
左侧中括号外的前四个输入变量对应前述七元组中的多带图灵机带符号完整集合γ,表示多带图灵机在通信缓存带b0指向空白符号,字长缓冲带b2指向空白符号,循环计算带b4指向空白符号,长度计算带b6指向空白符号。
[0085]
右侧中括号的五个状态分量对应前述七元组中的多带图灵机状态集合q,依次表示图灵机就绪、数据类型标识就绪、数据符号栈e1不操作、数据缓冲栈e3不操作、协议位置栈e5入栈;
[0086]
右侧中括号外的前四个输入变量对应前述七元组中的多带图灵机带符号完整集合γ,表示多带图灵机在通信缓存带b0指向空白符号,字长缓冲带b2指向字节的内容为0,循环计算带b4指向字节的内容为0,长度计算带b6指向字节的内容为0。
[0087]
右侧中括号外的最后一个变量对应多带图灵机控制器在通信缓存带b0上的移动方向,表示控制器不移动。
[0088]
后续各步骤中出现符号的含义类似,故不再逐一详细说明。
[0089]
步骤2、δ([q0,t0,ε,ε,i],β0,0,0,0)=([q1,t
b
,ε,ε,e],β0,l
e5
,0,p
l
,s),协议位置栈e5加载协议树根节点的类型码以及字节流长度字段在根节点数据组中的字长位置p
l
,协议位置栈e5的内容l
e5
移动到字长缓冲带b2,数据类型标识改为空数据t
b
;如之前所述,协议树是不同数据组构成的树状结构,数据组是将有效数据按照类型码进行划分得到,协议树中的数据组作为节点。
[0090]
步骤3、δ([q1,t
b
,ε,ε,e],β0,l2,0,l6)=([q1,t
b
,i,ε,ε],β0,0,0,l6,s),应用程序执行函数tree(
·
),函数tree(
·
)自变量为字长缓冲带b2的内容l2,此时的l2是协议树节点的类型码,获取到的数据组以数据符号序列的形式加载到数据符号栈e1,长度计算带b6的内容不变;其中,函数tree(
·
)用于根据类型码从协议树中获取数据组,并记录当前的协议树位置。
[0091]
步骤4、δ([q1,t
b
,i,ε,ε],β0,0,0,l6)=([q0,t0,e,ε,ε],β0,0,0,l6,s),数据组加载到数据符号栈e1后,控制器的数据类型标识改为就绪t0,进入pullsym子程序,长度计算带b6的内容不变。
[0092]
步骤5、δ([q1,t
b
,ε,ε,ε],β0,0,0,l6)=([q1,t
b
,ε,ε,e],β0,l
e5
,0,l6,s),本步骤由pullsym子程序跳转进入,具体为,pullsym子程序的步骤9中加载数据符号的类型为空数据t
b
时转入本步骤,将协议位置栈e5的内容l
e5
移动到字长缓冲带b2,长度计算带b6的内容不变,之后,转入步骤3。
[0093]
步骤6、δ([q1,t
b
,ε,ε,ε],β
b
,0,0,0)=([q0,t
b
,ε,ε,ε],β
b

b

b

b
,s),本步骤由mark子程序跳转进入,进入读操作的终止状态,完成读操作,字长缓冲带b2和循环计算带b4复位。
[0094]
2)所述写操作的步骤包括:
[0095]
步骤7、δ([q0,t0,i,ε,ε],β
b

b

b

b
)=([q2,t0,e,ε,ε],β
b
,0,0,0,s),进入写操作的初始状态,应用程序执行函数load(
·
),函数load(
·
)的自变量由应用程序给定,获取到的有效数据以数据符号序列的形式加载到数据符号栈e1,之后转入pullsym子程序(具体为pullsym子程序中的步骤11),其中,所述函数load(
·
),用于加载所有预发送的有效数
据,所有有效数据的排序符合应用层通信协议的规定。
[0096]
步骤8、δ([q2,t
b
,ε,ε,ε],β
b
,0,0,0)=([q0,t
b
,ε,ε,ε],β
b

b

b

b
,s),本步骤由pullsym子程序跳转进入,进入写操作的终止状态,完成读操作,字长缓冲带b2和循环计算带b4复位。
[0097]
2、pullsym子程序。
[0098]
本发明实施例中,所述pullsym子程序对于读操作与写操作各自执行不同的步骤;其中:
[0099]
1)对于读操作执行步骤包括:
[0100]
步骤9、δ([q0,t0,e,ε,ε],β0,0,0,l6)=([q1,t(α),ε,ε,ε],β0,l(α),0,l6,s),当控制器的数据类型标识为就绪t0时,数据符号栈e1弹出一个数据符号α,数据类型标识和字长缓冲带b2分别通过运算符t(
·
)和l(
·
)加载数据符号的类型以及字长,长度计算带b6的内容不变。后续步骤根据运算符t(
·
)加载数据符号的类型的不同而不同,具体如表5所述。
[0101][0102]
表5步骤9的后续步骤说明
[0103]
步骤10、此步骤由readlen子程序中的步骤33转入,当控制器的数据类型标识为字长数据时,数据符号栈e1弹出一个数据符号α,数据类型标识通过运算符t(
·
)加载数据符号类型,数据缓冲栈e3的内容l
e3
移动到字长缓冲带b2,长度计算带b6的内容不变,根据读取的数据类型标识,进入mark子程序。
[0104]
2)对于写操作执行步骤包括:
[0105]
步骤11、δ([q2,t0,e,ε,ε],β
b
,0,0,0)=([q2,t(α),ε,ε,ε],β
b
,l(α),0,0,s),当控制器的数据类型标识为就绪t0时,数据符号栈e1弹出一个数据符号α,数据类型标识和字长缓冲带b2分别通过运算符t(
·
)和l(
·
)加载数据符号的类型以及字长,根据数据类型标识进入mark子程序。当加载数据符号的类型以及字长分别为t
b
和0时,进入步骤(8)结束写入流程。
[0106]
步骤12、此步骤由mark子程序中的步骤22转入,当控制器的数据类型标识为字长数据时,数据符号栈e1弹出一
个数据符号α,数据类型标识通过运算符t(
·
)加载数据符号类型,字长缓冲带b2的存储内容l2不变,根据数据类型标识进入mark子程序。
[0107]
3、mark子程序。
[0108]
本发明实施例中,所述mark子程序对于读操作与写操作各自执行不同的步骤;其中:
[0109]
1)对于读操作执行步骤包括:
[0110]
步骤13、δ([q1,t1,ε,ε,ε],β0,l2,0,l6)=([q1,t1,ε,ε,ε],α,l2‑
1,0,l6‑
1,r),本步骤由pullsym子程序的读操作跳转进入(具体为前述步骤9),当控制器的数据类型标识为定长数据t1并且字长缓冲带b2的存储内容不为0时,控制器指向的通信缓存带符号β0将被标记为当前的数据符号α,标记完成后字长缓冲带b2中的存储内容l2减1,长度计算带b6中的非零数据l6减1,控制器向右移动。
[0111]
步骤14、δ([q1,t1,ε,ε,ε],β0,0,0,l6)=([q0,t0,e,ε,ε],β0,0,0,e(α)*l6,s),执行步骤13后,当字长缓冲带b2的存储内容l2为0时,控制器已完成定长数据的标记,执行有效性判定e(α),判定通过后的有效数据读取到应用程序数据符号内,返回pullsym子程序读取下一个数据符号。
[0112]
步骤15、本步骤由pullsym子程序的读操作跳转进入(具体为前述步骤10),当控制器的数据类型标识为变长数据并且字长缓冲带b2的存储内容l2不为0时,控制器指向的通信缓存带符号β0将被标记为当前的数据符号α,标记完成后l2减1,l6减1,控制器向右移动。
[0113]
步骤16、执行步骤15后,当字长缓冲带b2的存储内容l2为0时,控制器已完成变长数据的标记,执行有效性判定e(α),判定通过后的有效数据读取到应用程序数据符号内,返回pullsym子程序读取下一个数据符号。
[0114]
步骤17、δ([q1,t1,ε,ε,ε],β
b
,0,0,0)=([q1,t
b
,ε,ε,ε],β
b
,0,0,0,s),执行步骤13后,当控制器指向位置的数据符号为β
b
时,并且字长缓冲带b2的存储内容l2为0,数据类型标识将改为空数据t
b
,程序返回main子程序(具体为返回前述步骤6)结束读取流程。
[0115]
步骤18、执行步骤15后,当控制器指向位置的数据符号为β
b
时,并且字长缓冲带b2的存储内容l2为0,数据类型标识将改为空数据t
b
,程序返回main子程序(具体为返回前述步骤6)结束读取流程。
[0116]
2)对于写操作执行步骤包括:
[0117]
步骤19、δ([q2,t1,ε,ε,ε],β
b
,l2,0,0)=([q2,t1,ε,ε,ε],α,l2‑
1,0,0,r),当控制器的数据类型标识为定长数据t1,并且字长缓冲带b2的存储内容l2不为0时,控制器指向的通信缓存带b0的空白符号β
b
将被标记为当前的数据符号α,标记完成后l2减1,控制器向右移动。
[0118]
步骤20、δ([q2,t1,ε,ε,ε],β
b
,0,0,0)=([q2,t0,e,ε,ε],β
b
,0,0,0,s),执行步骤19后,当字长缓冲带b2的存储内容l2为0时,则控制器已将通信缓存带b0上的空白符号β
b
标记为数据符号α,返回pullsym子程序(具体为前述步骤11)写入下一个数据符号;同时,被标记的字节将被写入数据并通过tcpip协议发送到网络。
[0119]
步骤21、当控制器的数据类型标识为字长数据并且字长缓冲带b2的存储内容l2不为0时,控制器指向的通信缓存带b0的空白符号β
b
将被标记为当前的数据符号α,标记完成后l2减1,控制器向右移动;
[0120]
步骤22、执行步骤21后,当字长缓冲带b2的存储内容l2为0时,则字长缓冲带b2通过运算符v(
·
)加载当前数据符号α存储的有效数据,再返回pullsym子程序(具体为前述步骤12)写入下一个数据符号;被标记的字节将被写入数据并通过tcpip协议发送到网络。
[0121]
步骤23、当控制器的数据类型标识为变长数据并且字长缓冲带b2的存储内容l2不为0时,控制器指向的通信缓存带b0的空白符号β
b
将被标记为当前的数据符号α,标记完成后l2减1,控制器向右移动。
[0122]
步骤24、执行步骤23后,当字长缓冲带b2的存储内容l2为0时,则控制器已将通信缓存带b0上的空白符号β
b
标记为数据符号α,返回pullsym子程序(具体为前述步骤11)写入下一个数据符号,同时,被标记的字节将被写入数据并通过tcpip协议发送到网络。
[0123]
步骤25、δ([q2,t3,ε,ε,ε],β
b
,l2,0,0)=([q2,t3,ε,ε,ε],α,l2‑
1,0,0,r),当控制器的数据类型标识为循环数据t3,并且字长缓冲带b2的存储内容l2不为0时,控制器指向的通信缓存带b0的空白符号β
b
将被标记为当前的数据符号α,标记完成后l2减1,控制器向右移动。
[0124]
步骤26、δ([q2,t3,ε,ε,ε],β
b
,0,0,0)=([q2,t0,e,ε,ε],β
b
,0,0,0,s),执行步骤25后,当字长缓冲带b2的存储内容l2为0时,则控制器已将通信缓存带b0上的空白符号β
b
标记为数据符号α,返回pullsym子程序(具体为前述步骤11)写入下一个数据符号,同时,被标记的字节将被写入数据并通过tcpip协议发送到网络。
[0125]
步骤27、δ([q2,t4,ε,ε,ε],β
b
,l2,0,0)=([q2,t4,ε,ε,ε],α,l2‑
1,0,0,r),当控制器的数据类型标识为协议标记t4,并且字长缓冲带b2的存储内容l2不为0时,控制器指向的通信缓存带的空白符号β
b
将被标记为当前的数据符号α,标记完成后l2减1,控制器向右移动。
[0126]
步骤28、δ([q2,t4,ε,ε,ε],β
b
,0,0,0)=([q2,t0,e,ε,ε],β
b
,0,0,0,s),执行步骤27后,当字长缓冲带b2的存储内容l2为0时,则控制器已将通信缓存带b0上的空白符号β
b
标记为数据符号α,返回pullsym子程序(具体为前述步骤11)写入下一个数据符号,同时,被标记的字节将被写入数据并通过tcpip协议发送到网络;
[0127]
步骤29、δ([q2,t5,ε,ε,ε],β
b
,l2,0,0)=([q2,t5,ε,ε,ε],α,l2‑
1,0,0,r),当控制器的数据类型标识为长度数据t5,并且字长缓冲带b2的存储内容l2不为0时,控制器指向的通信缓存带b0符号β
b
将被标记为当前的数据符号α,标记完成后l2减1,控制器向右移动。
[0128]
步骤30、δ([q2,t5,ε,ε,ε],β
b
,0,0,0)=([q2,t0,e,ε,ε],β
b
,0,0,0,s),执行步骤29后,当字长缓冲带b2的存储内容l2为0时,则控制器已将通信缓存带b0上的空白符号β
b
标记为数据符号α,返回pullsym子程序(具体为前述步骤11)写入下一个数据符号,同时,被标记的字节将被写入数据并通过tcpip协议发送到网络。
[0129]
4、readlen子程序。
[0130]
本发明实施例中,readlen子程序执行的步骤包括:
[0131]
步骤31、当数据类型标识为字长数据并且字长缓冲带b2的存储内容l2不为0时,控制器设置数据缓冲栈e3为入栈状态,并转入步骤32。
[0132]
步骤32、控制器指向的通信缓存带符号β0将被标记为当前的数据符号α,控制器指向的字节将被存入数据缓冲栈e3,标记完成后l2减1,长度计算带中的非零数据l6减1,控制器向右移动。
[0133]
步骤33、执行步骤32后,当长缓冲带b2的存储内容l2为0时,控制器已完成字长数据的标记,执行有效性判定e(α),判定通过后的有效数据读取到数据符号内,数据符号α的有效数据存储到数据缓冲栈e3,再返回pullsym子程序(具体为前述步骤10)读取下一个数据符号。
[0134]
步骤34、δ([q1,t4,ε,ε,ε],β0,l2,0,l6)=([q1,t4,ε,ε,i],β0,l2,0,l6,s),当数据类型标识为协议标记t4,并且字长缓冲带b2的存储内容l2不为0时,控制器设置协议位置栈e5为入栈状态,并转入步骤35。
[0135]
步骤35、δ([q1,t4,ε,ε,i],β0,l2,0,l6)=([q1,t4,ε,ε,i],α,l2‑
1,0,l6‑
1,r),控制器指向的通信缓存带符号β0将被标记为当前的数据符号α,控制器指向的字节将被存入协议位置栈e5,标记完成后l2减1,l6减1,控制器向右移动。
[0136]
步骤36、δ([q1,t4,ε,ε,i],β0,0,0,l6)=([q1,t0,e,ε,ε],β0,0,0,e(α)*l6,s),执行步骤35后,当字长缓冲带b2的存储内容l2为0时,控制器已完成协议标记的标记,执行有效性判定e(α),判定通过后的有效数据读取到应用程序的数据符号内,数据符号α的有效数据存储到协议位置栈e5,再返回pullsym子程序(具体为前述步骤9)读取下一个数据符号。
[0137]
步骤37、δ([q1,t5,ε,ε,ε],β0,l2,0,l6)=([q1,t5,ε,i,ε],β0,l2,0,l6,s),当数据类型标识为长度数据t5,并且字长缓冲带b2的存储内容l2不为0时,控制器设置协议位置栈e5为入栈状态,并转入步骤38。
[0138]
步骤38、δ([q1,t5,ε,i,ε],β0,l2,0,l6)=([q1,t5,ε,i,ε],α,l2‑
1,0,l6,r),控制器指向的通信缓存带符号β0将被标记为当前的数据符号α,控制器指向的字节将被存入数据缓冲栈e3,标记完成后l2减1,l6不变,控制器向右移动。
[0139]
步骤39、δ([q1,t5,ε,i,ε],β0,0,0,l6)=([q1,t0,e,ε,ε],β0,0,0,e(α)*l
e3
,s),执行步骤38后,当字长缓冲带b2的存储内容l2为0时,控制器已完成长度数据的标记,执行有效性判定e(α),判定通过后的有效数据读取到应用程序的数据符号内;数据符号α的有效数据存储到数据缓冲栈e3,存储内容记为l
e3
,然后移动到长度计算带b6,再返回pullsym子程序(具体为前述步骤9)读取下一个数据符号。
[0140]
5、readran子程序。
[0141]
本发明实施例中,readran子程序执行的步骤依次包括:
[0142]
步骤40、δ([q1,t3,ε,ε,ε],β0,l2,0,l6)=([q1,t3,ε,i,ε],β0,l2,0,l6,s),当数据类型标识为循环数据t3,并且字长缓冲带b2的存储内容l2不为0时,控制器设置数据缓冲栈e3为入栈状态。
[0143]
步骤41、δ([q1,t3,ε,i,ε],β0,l2,0,l6)=([q1,t3,ε,i,ε],α,l2‑
1,0,l6‑
1,r),控制器指向的通信缓存带符号β0将被标记为当前的数据符号α,控制器指向的字节将被存入数据缓冲栈e3,标记完成后l2减1,长度计算带中的非零数据l6减1,控制器向右移动。
[0144]
步骤42、δ([q1,t3,ε,i,ε],β0,0,0,l6)=([q1,t3,i,ε,ε],β0,l
e3
,r(α),e(α)*l6,s),控制器已完成循环数据的标记,执行有效性判定e(α),判定通过后的有效数据读取到数据符号内;将数据缓冲栈e3的数据存储内容l
e3
移动到字长缓冲带b2,当前循环数据的编号终点r(α)加载到循环计算带b4,数据符号栈e1设置为入栈状态,如果l
e3
的内容为0,则读取的循环数据内容为0,转入步骤45,如果l
e3
的内容不为0,转入步骤43。
[0145]
步骤43、δ([q1,t3,i,ε,ε],β0,l2,l4,l6)=([q1,t3,i,ε,ε],β0,l2,l4‑
1,l6,s),当数据类型标识为循环数据t3并且字长缓冲带b2、循环计算带b4的存储内容不为0时,循环计算带b4的存储内容l4是通信协议的数据编号,能够唯一对应程序内可操作的数据符号α。将α加入数据符号栈e1后,l4减1,如果l4等于当前循环数据的编号起点s(α),转入步骤44,反之再次执行步骤43。
[0146]
步骤44、δ([q1,t3,i,ε,ε],β0,l2,s(α),l6)=([q1,t3,i,ε,ε],β0,l2‑
1,r(α),l6,s),当循环计算带b4的存储内容l4为当前循环数据的编号起点s(α)时,字长缓冲带b2的存储内容l2减1,当前循环数据的编号终点r(α)加载到循环计算带b4,如果l2为0,转入步骤45,如果l2大于0,转入步骤43。
[0147]
步骤45、δ([q1,t3,i,ε,ε],β0,0,l4,l6)=([q1,t3,e,ε,ε],β0,0,l4,l6,s),当字长缓冲带b2的存储内容为0时,数据符号栈e1由入栈状态调整为出栈状态。
[0148]
步骤46、δ([q1,t3,e,ε,ε],β0,0,l4,l6)=([q1,t3,e,ε,ε],β0,0,l4‑
1,l6,s)当字长缓冲带b2的存储内容为0时,数据符号栈e1执行出栈操作。出栈操作的目的是清空预加载的数据符号,使得循环内数据符号的重复次数与步骤39加载的数据缓冲栈的存储内容l
e3
一致。由于步骤(3)加载数据符号栈e1时,循环数据指定范围内的数据符号会被预加载一次,如果不执行出栈操作弹出预加载数据,数据符号栈e1中的数据符号累计个数就无法与步骤39加载的数据缓冲栈存储内容l
e3
形成匹配关系,从而导致读取流程失效。
[0149]
步骤47、δ([q1,t3,e,ε,ε],β0,0,s(α),l6)=([q0,t0,e,ε,ε],β0,0,0,l6,s),出栈操作执行完毕后,返回pullsym子程序(具体为前述步骤9)读取下一个数据符号。
[0150]
以上为五个子程序内部及子程序之间的交互关系,为了便于理解,下面结合五个子程序内部及子程序之间的交互关系对数据正常接收、数据正常发送、数据内容错误和数据长度错误四个应用案例进行介绍。
[0151]
由于数据链路本身也会产生扰动导致字节流内出现无效数据,因此,只在接收端检出非法数据、异常数据和长度错误数据并执行失效

可运作导向,而不在发送端进行无效字节流的检出操作。每个案例中通信缓存接收和发送的数据内容符合表6、表7、表8所述的数据组规定。数据组0、数据组0

1、数据组0
‑1‑
3的定义来自某大规模分布式硬实时系统中实际使用的应用层私有通信协议。
[0152]
数据编号数据类型说明1t5数据长度2t4类型码3t1版本号
4t1时间
[0153]
表6数据组0的定义
[0154][0155]
表7数据组0

1的定义
[0156][0157]
表8数据组0
‑1‑
3的定义
[0158]
1、数据正常接收案例。
[0159]
通信缓存接收的字节流符合应用层私有通信协议的规定。当数据正常接收时,字节流中不存在非法数据、异常数据和长度错误数据。执行实例如下:
[0160]
1)执行步骤1、步骤2,完成读取流程的初始化并加载协议树根节点的类型码到协议位置栈e5。
[0161]
2)执行步骤3、步骤4,加载数据组0的数据符号到数据符号栈e1,协议位置栈e5清空。
[0162]
3)执行步骤9、步骤37、步骤38、步骤39,从数据符号栈e1拉取编号为1且类型为长度数据t5的数据符号。通信缓存被标记的字节存入数据符号,长度计算带b6加载被标记字节为字节流总长度。
[0163]
4)执行步骤9、步骤34、步骤35步骤、36,从数据符号栈e1拉取编号为2且类型为协议标记t4的数据符号。通信缓存被标记的字节存入数据符号,协议位置栈e5加载被标记字节为下一个数据组的类型码。
[0164]
5)执行步骤9、步骤13、步骤14,从数据符号栈e1拉取编号为3且类型为定长数据t1的数据符号。通信缓存被标记的字节存入数据符号。编号4的数据符号处理流程与3一致。
[0165]
6)执行步骤9、步骤5、步骤3、步骤4,获取协议位置栈e5的内容后,加载数据组0

1的数据符号到数据符号栈e1,协议位置栈e5清空。
[0166]
7)执行步骤9、步骤13、步骤14,从数据符号栈e1拉取编号为5且类型为定长数据t1的数据符号。通信缓存被标记的字节存入数据符号。
[0167]
8)执行步骤9、步骤34、步骤35、步骤36,从数据符号栈e1拉取编号为6且类型为协议标记t4的数据符号。通信缓存被标记的字节存入数据符号,协议位置栈e5加载被标记字节为下一个数据组的类型码。
[0168]
9)执行步骤9、步骤31、步骤32、步骤33、步骤10、步骤15、步骤16,从数据符号栈e1依次拉取编号为7且类型为字长数据的数据符号,以及编号为8且类型为变长数据的数据符号。通信缓存被标记的字节存入数据符号,字长缓冲带b2和数据缓冲栈e3在使用完成后清空。
[0169]
10)执行步骤9、步骤5、步骤3、步骤4,获取协议位置栈e5的内容后,加载数据组0
‑1‑
3的数据符号到数据符号栈e1,协议位置栈e5清空。
[0170]
11)执行步骤9、步骤13、步骤14,从数据符号栈e1拉取编号为9且类型为定长数据t1的数据符号。通信缓存被标记的字节存入数据符号。编号10的数据符号处理流程与9一致。
[0171]
12)执行步骤9、步骤40、步骤41、步骤42、步骤43、步骤44、步骤45、步骤46、步骤47,从数据符号栈e1拉取编号为11且类型为循环数据t3的数据符号。循环计算带b4加载被标记字节为循环个数,然后将数据符号倒序插入数据符号栈e1,每次插入的数据符号编号为依次为19、18、17、16、15、14、13和12。如果循环个数为0,步骤46能够保证插入次数与字节流中读取的循环个数一致。
[0172]
13)执行步骤9、步骤13、步骤14,从数据符号栈e1拉取编号为12且类型为定长数据t1的数据符号。通信缓存被标记的字节存入数据符号。
[0173]
14)执行步骤9、步骤31、步骤32、步骤33、步骤10、步骤15、步骤16,从数据符号栈e1依次拉取编号为13且类型为字长数据的数据符号,以及编号为14且类型为变长数据的数据符号。通信缓存被标记的字节存入数据符号,字长缓冲带b2和数据缓冲栈e3在使用完成后清空。
[0174]
15)执行步骤9、步骤13、步骤14,从数据符号栈e1拉取编号为15且类型为定长数据t1的数据符号。通信缓存被标记的字节存入数据符号。
[0175]
16)执行步骤9、步骤40、步骤41、步骤42、步骤43、步骤44、步骤45、步骤46、步骤47,从数据符号栈e1拉取编号为16且类型为循环数据t3的数据符号。循环计算带b4加载被标记字节为循环个数,然后将数据符号倒序插入数据符号栈e1,每次插入的数据符号编号为依次为19、18和17。如果循环个数为0,步骤46能够保证插入次数与字节流中读取的循环个数一致。
[0176]
17)执行步骤9、步骤13、步骤14,从数据符号栈e1拉取编号为17且类型为定长数据t1的数据符号。通信缓存被标记的字节存入数据符号。
[0177]
18)执行步骤9、步骤31、步骤32、步骤33、步骤10、步骤15、步骤16,从数据符号栈e1依次拉取编号为18且类型为字长数据的数据符号,以及编号为19且类型为变长数据的数据符号。通信缓存被标记的字节存入数据符号,字长缓冲带b2和数据缓冲栈e3在使用完成
后清空。
[0178]
19)从数据符号栈e1不断拉取数据符号,根据数据类型标记通信缓存并存储数据,直至字节流全部标记完成。
[0179]
20)执行步骤18、步骤6,多带图灵机复位并在接受状态停机,读取流程结束。
[0180]
2、数据正常发送案例。
[0181]
应用程序预发送的有效数据排序符合应用层通信协议的规定。当表8中数据编号11、16的值分别为2和1时,加载的序列为α1α2α3α4α5α6α7α8α9α
10
α
11
α
12
α
13
α
14
α
15
α
16
α
17
α
18
α
19
α
12
α
13
α
14
α
15
α
16
α
17
α
18
α
19
,当数据正常发送时,每个数据符号α
i
,i∈[1,19]中预存的数据都在有效范围内,执行实例如下:
[0182]
1)执行步骤7,完成写入流程的初始化并将预发送内容以数据符号的形式加载到数据符号栈e1。所有符号按照数据编号和存入时间顺序排列。
[0183]
2)执行步骤11、步骤29、步骤30,从数据符号栈e1拉取编号为1且类型为长度数据t5的数据符号。数据符号内存储的有效数据写入通信缓存。
[0184]
3)执行步骤11、步骤27、步骤28,从数据符号栈e1拉取编号为2且类型为协议标记t4的数据符号。数据符号内存储的有效数据写入通信缓存。
[0185]
4)执行步骤11、步骤19、步骤20,从数据符号栈e1拉取编号为3且类型为定长数据t1的数据符号。数据符号内存储的有效数据写入通信缓存。编号4、5的数据符号处理流程与3一致。
[0186]
5)执行步骤11、步骤27、步骤28,从数据符号栈e1拉取编号为6且类型为协议标记t4的数据符号。数据符号内存储的有效数据写入通信缓存。
[0187]
6)执行步骤11、步骤21、步骤22、步骤12、步骤23、步骤24,从数据符号栈e1依次拉取编号为7且类型为字长数据的数据符号,以及编号为8且类型为变长数据的数据符号。编号为7的数据符号内容存入字长缓冲带b2后,再写入通信缓存。编号为8的数据符号按照字长缓冲带b2存储的字长数据写入通信缓存,字长缓冲带b2在使用完成后清空。
[0188]
7)执行步骤11、步骤19、步骤20,从数据符号栈e1拉取编号为9且类型为定长数据t1的数据符号。数据符号内存储的有效数据写入通信缓存。编号10的数据符号处理流程与9一致。
[0189]
8)执行步骤11、步骤25、步骤26,从数据符号栈e1拉取编号为11且类型为循环数据t3的数据符号。数据符号内存储的有效数据写入通信缓存。由于数据编号11中存储的值为2,加载的内容中数据编号12至19的内容出现了2次。
[0190]
9)执行步骤11、步骤19、步骤20,从数据符号栈e1拉取编号为12且类型为定长数据t1的数据符号。数据符号内存储的有效数据写入通信缓存。
[0191]
10)执行步骤11、步骤21、步骤22、步骤12、步骤23、步骤24,从数据符号栈e1依次拉取编号为13且类型为字长数据的数据符号,以及编号为14且类型为变长数据的数据符号。编号为13的数据符号内容存入字长缓冲带b2后,再写入通信缓存。编号为14的数据符号按照字长缓冲带b2存储的字长数据写入通信缓存,字长缓冲带b2在使用完成后清空。
[0192]
11)执行步骤11、步骤19、步骤20,从数据符号栈e1拉取编号为15且类型为定长数据t1的数据符号。数据符号内存储的有效数据写入通信缓存。
[0193]
12)执行步骤11、步骤25、步骤26,从数据符号栈e1拉取编号为16且类型为循环数据t3的数据符号。数据符号内存储的有效数据写入通信缓存。由于数据编号16中存储的值为1,加载的内容中数据编号17至19的内容出现了1次。如果数据编号16中存储的值为0,则数据编号17至19的内容不会出现。
[0194]
13)执行步骤11、步骤19、步骤20,从数据符号栈e1拉取编号为17且类型为定长数据t1的数据符号。数据符号内存储的有效数据写入通信缓存。
[0195]
14)执行步骤11、步骤21、步骤22、步骤12、步骤23、步骤24,从数据符号栈e1依次拉取编号为18且类型为字长数据的数据符号,以及编号为19且类型为变长数据的数据符号。编号为18的数据符号内容存入字长缓冲带b2后,再写入通信缓存。编号为19的数据符号按照字长缓冲带b2存储的字长数据写入通信缓存,字长缓冲带b2在使用完成后清空。
[0196]
15)从数据符号栈e1依次拉取剩余的数据符号,根据数据类型标记将数据写入缓存,直至数据符号栈e1为空。
[0197]
16)执行步骤11、步骤8,多带图灵机复位并在接受状态停机,写入流程结束。
[0198]
3、数据内容错误案例。
[0199]
在接收流程中能够检测字节流中的无效数据并执行失效

可运作导向流程。当字节流中存在非法数据或异常数据时,执行实例如下:
[0200]
1)编号为3、4、5、9、10、12、15、17的数据符号:执行步骤13读取类型为定长数据t1的数据符号后,进入步骤14并执行有效性判定e(α)。如果被标记的字节流中存在超出有效范围的数据或异常值,运算符e(α)将返回0,导致步骤14在长度计算带b6中计入0。由于状态转移函数中不存在接续规则,多带图灵机将在非接受状态停机,将执行失效

可运作导向流程,具体方法为强制回到初始状态或跳过当前字节,再记录错误日志。
[0201]
2)编号为7、13、18的数据符号:执行步骤32读取类型为字长数据的数据符号后,进入步骤33并执行有效性判定e(α)。如果被标记的字节流中存在超出有效范围的数据或异常值,运算符e(α)将返回0,导致步骤33在长度计算带b6中计入0。由于状态转移函数中不存在接续规则,多带图灵机将在非接受状态停机,将执行失效

可运作导向流程,具体方法为强制回到初始状态或跳过当前字节,再记录错误日志。
[0202]
3)编号为8、14、19的数据符号:执行步骤15读取类型为变长数据t21的数据符号后,进入步骤16并执行有效性判定e(α)。如果被标记的字节流中存在超出有效范围的数据或异常值,运算符e(α)将返回0,导致步骤16在长度计算带b6中计入0。由于状态转移函数中不存在接续规则,多带图灵机将在非接受状态停机,将执行失效

可运作导向流程,具体方法为强制回到初始状态或跳过当前字节,再记录错误日志。
[0203]
4)编号为11、16的数据符号:执行步骤41读取类型为循环数据t3的数据符号后,进入步骤42并执行有效性判定e(α)。如果被标记的字节流中存在超出有效范围的数据或异常值,运算符e(α)将返回0,导致步骤42在长度计算带b6中计入0。由于状态转移函数中不存在接续规则,多带图灵机将在非接受状态停机,将执行失效

可运作导向逻辑,具体方法为强制回到初始状态或跳过当前字节,再记录错误日志。
[0204]
5)编号为2、6的数据符号:执行步骤35读取类型为协议标记t4的数据符号后,进入步骤35并执行有效性判定e(α)。如果被标记的字节流中存在超出有效范围的数据或异常
值,运算符e(α)将返回0,导致步骤36在长度计算带b6中计入0。由于状态转移函数中不存在接续规则,多带图灵机将在非接受状态停机,将执行失效

可运作导向逻辑,具体方法为强制回到初始状态或跳过当前字节,再记录错误日志。
[0205]
6)编号为1的数据符号:执行步骤38读取类型为长度数据t5的数据符号后,进入步骤39并执行有效性判定e(α)。如果被标记的字节流中存在超出有效范围的数据或异常值,运算符e(α)将返回0,导致步骤39在长度计算带b6中计入0。由于状态转移函数中不存在接续规则,多带图灵机将在非接受状态停机,将执行失效

可运作导向逻辑,具体方法为强制回到初始状态或跳过当前字节,再记录错误日志。
[0206]
4、数据长度错误案例。
[0207]
在检测长度错误数据时,执行的步骤与数据正常读取时一致。应用程序先检测一次长度错误数据,如果没有错误再执行字节流读取流程。
[0208]
由于执行读取流程的目的转变为长度校验,多带图灵机可以只标记并读取字长数据循环数据t3、协议标记t4和长度数据t5的内容,而只标记不读取定长数据t1、变长数据的内容。如果长度计算带b6在字节流全部标记完成前存储内容为0,或字节流全部标记完成后存储内容不为0,则算法检出了长度错误数据,多带图灵机将在非接受状态停机,算法将执行失效

可运作导向逻辑,具体方法为强制回到初始状态或跳过当前字节,再记录错误日志。
[0209]
以上数据正常接收、数据正常发送、数据内容错误和数据长度错误四个应用案例表明,本发明提供的方法具备传统方法读取和写入实时数据链路字节流的功能,并在此基础上实现无效字节流的检出以及失效

可运作导向流程。本发明提供的方法根据某大规模分布式硬实时系统中实际使用的应用层私有通信协议制作,带来的有益效果可总结如下:
[0210]
1)允许tcp/ip应用程序执行非法数据的无效性检出以及失效

可运作导向流程。该流程与实时数据链路字节流的读取流程同时进行,能够防止无效数据进一步导致应用程序出现非设计预期的行为。
[0211]
2)允许tcp/ip应用程序执行异常数据的无效性检出以及失效

可运作导向流程。该流程与实时数据链路字节流的读取流程同时进行,能够防止无效数据进一步导致应用程序崩溃。
[0212]
3)允许tcp/ip应用程序在数据读取流程开始之前,提前判定实时数据链路字节流整体是否为长度错误数据。
[0213]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例可以通过软件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,上述实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd

rom,u盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0214]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
[0215]
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1