一种避免因丢包而连续损失两组报文的报文处理方法

文档序号:8342630阅读:507来源:国知局
一种避免因丢包而连续损失两组报文的报文处理方法
【技术领域】
[0001]本发明涉及一种避免因丢包而连续损失两组报文的报文处理方法,属于信息技术领域。
【背景技术】
[0002]电子设备(如GPS接收机)常常通过RS232,USB等端口或者借助无线网络输出本设备测量或者感知到的位置等信息。由于工作场景、报文传输路径等客观原因导致报文在发送、传输、接收的过程中可能发生无码、丢包等情况。
[0003]报文的读取的技术主要分为两大块,分别是报文头识别和报文内容的读取这两大块技术。以往处理报文的较常用方法是,在获取的报文中检测是否包含可识别的报文头,一旦检测到系统可识别的报文头后,就开始读取报文头后面的报文内容,一直读到当报文内容长度达到所设计报文长度的是时候,就停止本次报文内容的读取,说明这一次报文内容读取完成。在读取内容完成后再重新检测报文头,从而进行下一个报文的读取工作。上面的方法主要缺点是。首先,上述方法没有检测报文内容的工作,所以不能确定所读取的报文内容是否发生丢包现象。其次,如果上一个报文内容有丢包现象,而没有被及时的检测出来,就有可能把下一个报文的报文头也读取到报文内容中去,造成下一个报文没有完整的报文头,在下一个报文头检测处就无法检测到。就造成下一个报文内容因没有报文头儿无法读取。上面的方法在应用中就有可能在上一个报文发生丢包现象的时候,把下一个报文的报文头给吸收,造成两组报文信息都丢失了。

【发明内容】

[0004]发明目的:为了克服现有技术中存在的不足,本发明提供一种避免因丢包而连续损失两组报文的报文处理方法,能及时的发现在报文内容中的丢包现象,并且避免因一个报文丢包而导致连续两组或多组报文。
[0005]技术方案:为实现上述目的,本发明采用的技术方案为:
[0006]一种避免因丢包现象而造成连续损失两组报文的报文处理方法,对具有报文头和固定长度报文内容的报文或具有报文头、报文尾以及报文内容的报文的处理方法:
[0007]I)当每个报文是由一个报文头和一个固定长的报文内容组成,假设获取到的总报文的总长度为A*(m+n),由A个报文组成,其中每个报文头长度为m,每个报文内容长度为η:
[0008]11)对获取到的报文进行报文头检测,令首先检测得到的可识别报文头为第i = I个报文头;
[0009]12)读取第i个报文头后面长度为(n+m-t),t = I?m_l的报文内容,并同时对长度为(n+m-t)的报文内容进行第i+Ι个报文头检测:若未在长度为(n+m-t)的报文内容中检测到可识别的第i+Ι个报文头,则进行步骤13);若在长度为(n+m-t)的报文内容中检测到可识别的第i+Ι个报文头,则进行步骤14);
[0010]13)令i = i+1,检测得到可识别的第i+Ι个报文头,重复步骤12),直至读取完整个总报文;
[0011]14)令i = i+Ι,重复步骤12),直至读取完整个总报文;
[0012]2)当报文是由报文头、报文内容(固定长的报文或非固定长的报文)以及报文尾组成的:
[0013]21)对获取到的报文进行报文头检测,令首先检测得到的可识别报文头为第i = I个报文头;
[0014]22)读取第i个报文头后面的报文内容,并且同时对该报文内容进行报文尾检测,检测到报文尾则进入步骤23);
[0015]23)令i = i+Ι,检测得到可识别的第i+Ι个报文头,重复步骤22),直至读取完整个总报文。
[0016]进一步的,所述报文头检测采用KMP算法。
[0017]有益效果:本发明提供的一种避免因丢包而连续损失两组报文的报文处理方法:在报文内容读取的过程中可以很快的辨别该报文是否发生丢包现象,一旦发生丢包现象就终止对本报文内容的读取,这样即使该报文发生丢包现象对下一个报文的读取也没有产生影响,从而避免因报文内容丢失而对下一个报文产生污染,即在处理电子设备或者无线网络的输出报文时可以避免因丢包现象而连续损失两组或多组报文。
【附图说明】
[0018]图1为本发明一种避免因丢包而连续损失两组报文的报文处理方法的流程图;
[0019]图2为固定长的报文内容的接收的流程图;
[0020]图3为有报文尾的报文接收的流程图。
【具体实施方式】
[0021]下面结合附图对本发明作更进一步的说明。
[0022]本发明中报文的报文头检测方法是采用的是KMP算法(克努特——莫里斯——普拉特算法),是一种自动检测接收到的报文头方法。KMP算法中,对于每一个模式串我们实现计算出模式串的内部匹配信息,在匹配失败后,在已经匹配的模式串子串中,找出最长的相同的前缀和后缀,然后移动使它们重叠。
[0023]下面一个例子进一步解释KMP算法。
[0024]主串:abacaabacabacabaabb,下文中我们称作T ;
[0025]模式串:abacab,下文中我们称作W ;
[0026]在暴力字符串匹配过程中,我们会从T[O]跟W[0]匹配,如果相等则匹配下一个字符,直到出现不相等的情况,此时我们会简单的丢弃前面的匹配信息,然后从T[l]跟W[l]匹配,循环进行,直到主串结束,或者出现匹配的情况。
[0027]而KMP算法中:
[0028]在第一次匹配过程中,
[0029]T:abacaabacabacabaabb,
[0030]W:abacab ;
[0031]在T[5]与W[5]出现了不匹配,而T[0]?Τ[4]是匹配的,现在Τ[0]?Τ[4]就是上文中说的已经匹配的模式串子串,然后移动找出最长的相同的前缀和后缀并使他们重叠,这样就减少了匹配次数,增加了效率。
[0032]下面结合附图对本发明做进一步说明。
[0033]本发明中报文内容的接收过程如图1和2的流程图所示:
[0034]一种避免因丢包而连续损失两组报文的报文处理方法,对具有报文头和固定长度报文内容的报文或具有报文头、报文尾以及报文内容的报文的处理方法:
[0035]I)当每个报文是由一个报文头和一个固定长的报文内容组成,假设获取到的总报文的总长度为A*(m+n),由A个报文组成,其中每个报文头长度为m,每个报文内容长度为η:
[0036]11)对获取到的报文进行报文头检测,令首先检测得到的可识别报文头为第i = I个报文头;
[0037]12)读取第i个报文头后面长度为(n+m-t),t = I?m_l的报文内容,并同时对长度为(n+m-t)的报文内容进行第i+Ι个报文头检测:若未在长度为(n+m-t)的报文内容中检测到可识别的第i+Ι个报文头,则进行步骤13);若在长度为(n+m-t)的报文内容中检测到可识别的第i+Ι个报文头,则进行步骤14);
[0038]13)令i = i+Ι,检测得到可识别的第i+Ι个报文头,重复步骤12),直至读取完整个总报文;
[0039]14)令i = i+Ι,重复步骤12),直至读取完整个总报文;
[0040]2)当报文是由报文头、报文内容(固定长的报文或非固定长的报文)以及报文尾
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1