数据传输方法及装置与流程

文档序号:12728994阅读:431来源:国知局
数据传输方法及装置与流程

本发明涉及通信技术领域,特别是涉及一种数据传输方法及装置。



背景技术:

MODEM(调制解调器)通讯是一种在有线电话网络上进行数据传输的通讯,有线电话网络容易遭受外界环境中各种电磁信号的干扰,例如毛刺干扰等,毛刺干扰指的是一种振幅如刺状的、单次持续时间极短的信号干扰。干扰会导致信号损伤,引起误码,从而造成数据传输瞬时或持续性出错。

在传统的方式中,一般采用硬件滤除MODEM通讯中的干扰,但是硬件也无法把通讯过程中的所有干扰均滤除掉。而对于干扰所引发的误码,则采用校验失败后重传的方法进行解决,本端若接收到有误码的数据包,则该数据包无法校验通过,本端丢弃该校验不通过的数据包,并继续接收由对端重新发送的数据包,直至本端对接收的数据包校验通过则接收成功。然而,当MODEM通讯遇上准周期性的信号干扰时,干扰以近似周期的方式出现,每个数据包均可能被干扰而引起误码,若是采用传统方式中的校验失败后重传的方法,将可能出现接收的数据包一直无法校验通过的情况,最终将会因接收数据超时而导致整个通讯过程中止,严重影响通讯效果。



技术实现要素:

基于此,有必要提供一种数据传输方法,能在被准周期性的信号干扰时成功得到正确的数据包,保证通讯正常,提高通讯效果。

此外,还有必要提供一种数据传输装置,能在被准周期性的信号干扰时成功得到正确的数据包,保证通讯正常,提高通讯效果。

一种数据传输方法,包括:

接收对端发送的数据包;

对所述数据包进行校验,检测所述数据包是否为误码包;

若所述数据包为误码包,则存储所述误码包,并重新接收所述对端发送的数据包;

当重新接收所述对端发送的数据包的次数大于预设阈值时,根据存储的多个误码包拼凑得到正确的数据包。

在其中一个实施例中,在所述接收对端发送的数据包的步骤之前,还包括:

获取通讯协议中约定的重发最大次数及数据包最大长度;

根据所述重发最大次数及数据包最大长度分配缓存空间。

在其中一个实施例中,所述当重新接收所述数据包的次数大于预设阈值时,根据存储的多个误码包拼凑得到正确的数据包,包括:

获取存储的多个误码包的长度;

若长度相等的误码包的个数大于预设个数,则提取所述长度相等的误码包;

逐字节对提取的各个误码包进行比较,判断同一字节下所述提取的各个误码包的值是否相同;

若同一字节下所述提取的各个误码包的值相同,则选取具有相同值的字节下所述提取的各个误码包中相同的值;

若同一字节下所述提取的各个误码包的值不同,则选取具有不同值的字节下所述提取的各个误码包中出现次数大于预设次数的值;

根据各个字节下选取的值拼凑得到数据包。

在其中一个实施例中,在所述若同一字节下所述提取的各个误码包的值不同,则选取具有不同值的字节下所述提取的各个误码包中出现次数大于预设次数的值的步骤之后,还包括:

若所述具有不同值的字节下所述提取的各个误码包中出现次数大于预设次数的值为多个,则根据所述提取的各个误码包的存储顺序从出现次数大于预设次数的多个值中选取最先出现的值。

在其中一个实施例中,在所述根据各个字节下选取的值拼凑得到数据包的步骤之后,还包括:

提取拼凑得到的数据包中的校验码对所述拼凑得到的数据包进行校验;

若校验通过,则所述拼凑得到的数据包为正确的数据包;

若校验失败,则重新接收所述对端发送的数据包;

当重新接收所述对端发送的数据包的次数达到预设限定值时,则发送重试超限指令。

一种数据传输装置,包括:

接收模块,用于接收对端发送的数据包;

校验模块,用于对所述数据包进行校验,检测所述数据包是否为误码包;

存储模块,用于若所述数据包为误码包,则存储所述误码包,并通过所述接收模块重新接收所述对端发送的数据包;

拼包模块,用于当重新接收所述对端发送的数据包的次数大于预设阈值时,根据存储的多个误码包拼凑得到正确的数据包。

在其中一个实施例中,所述装置还包括:

获取模块,用于获取通讯协议中约定的重发最大次数及数据包最大长度;

分配模块,用于根据所述重发最大次数及数据包最大长度分配缓存空间。

在其中一个实施例中,所述拼包模块,包括:

长度获取单元,用于获取存储的多个误码包的长度;

提取单元,用于若长度相等的误码包的个数大于预设个数,则提取所述长度相等的误码包;

比较单元,用于逐字节对提取的各个误码包进行比较,判断同一字节下所述提取的各个误码包的值是否相同;

选取单元,用于若同一字节下所述提取的各个误码包的值相同,则选取具有相同值的字节下所述提取的各个误码包中相同的值;

所述选取单元,还用于若同一字节下所述提取的各个误码包的值不同,则选取具有不同值的字节下所述提取的各个误码包中出现次数大于预设次数的值;

拼凑单元,用于根据各个字节下选取的值拼凑得到数据包。

在其中一个实施例中,所述选取单元,还用于若所述具有不同值的字节下所述提取的各个误码包中出现次数大于预设次数的值为多个,则根据所述提取的各个误码包的存储顺序从出现次数大于预设次数的多个值中选取最先出现的值。

在其中一个实施例中,所述拼包模块,还包括:

校验单元,用于提取拼凑得到的数据包中的校验码对所述拼凑得到的数据包进行校验,若校验通过,则所述拼凑得到的数据包为正确的数据包,若校验失败,则通过所述接收模块重新接收所述对端发送的数据包;

发送单元,用于当重新接收所述对端发送的数据包的次数达到预设限定值时,则发送重试超限指令。

上述数据传输方法及装置,接收对端发送的数据包,对数据包进行校验,若数据包被检测为误码包,则存储该误码包,并重新接收对端发送的数据包,当重新接收对端发送的数据包的次数大于预设阈值时,根据存储的多个误码包拼凑得到正确的数据包,即使因准周期性的信号干扰而导致接收的每个数据包发生误码一直无法校验通过,也依然可以得到正确的数据包,能够保证通讯正常,提高通讯效果。

附图说明

图1为一个实施例中终端的内部结构示意图;

图2为一个实施例中数据传输方法的应用场景图;

图3为一个实施例中数据传输方法的流程示意图;

图4为一个实施例中分配缓存空间的流程示意图;

图5为一个实施例中根据存储的多个误码包拼凑得到正确的数据包的流程示意图;

图6为另一个实施例中根据存储的多个误码包拼凑得到正确的数据包的流程示意图;

图7为一个实施例中数据传输装置的结构示意图;

图8为另一个实施例中数据传输装置的结构示意图;

图9为一个实施例中拼包模块的内部结构示意图;

图10为另一个实施例中拼包模块的内部结构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

图1为一个实施例中终端的内部结构示意图。如图1所示,该终端包括通过系统总线连接的处理器、非易失性存储介质、内存储器、网络接口和输入装置。其中,终端的非易失性存储介质存储有操作系统,还包括一种数据传输装置,该数据传输装置用于实现一种数据传输方法。该处理器用于提供计算和控制能力,支撑整个终端的运行。终端中的内存储器为非易失性存储介质中的数据传输装置的运行提供环境,该内存储器中可储存有计算机可读指令,该计算机可读指令被所述处理器执行时,可使得所述处理器执行一种数据传输方法。网络接口用于与其它终端进行网络通信,如接收计算机的数据传输请求、向其它MODEM传输数据等。终端的输入装置可以是显示屏上覆盖的触摸层,也可以是终端外壳上设置的按键、轨迹球或触控板,也可以是外接的键盘、触控板或鼠标等。该终端可以是MODEM、手机、平板电脑或者个人数字助理或穿戴式设备等。本领域技术人员可以理解,图1中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的终端的限定,具体地终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

图2为一个实施例中数据传输方法的应用场景图。当计算机102需要与计算机104进行数据传输时,计算机102可向MODEM202发送握手信号,并进行拨号,当拨号完成后,MODEM202与MODEM204建立连接。连接成功后,计算机104将数据发送给MODEM202,MODEM202将数据调制成数字式数据,并通过电话线传输给MODEM204,MODEM204接收数字式数据后进行解调,还原数据,并将数据传递给计算机104,从而实现计算机102与计算机104之间的通信。

在利用MODEM通讯进行数据传输时,本端MODEM204接收对端MODEM202发送的数据包,本端MODEM204对该数据包进行校验,并检测该数据包是否为误码包。若该数据包为误码包,本端MODEM204存储该误码包,并重新接收对端MODEM202发送的数据包。当重新接收对端MODEM202发送的数据包的次数大于预设阈值时,根据存储的多个误码包拼凑得到正确的数据包。

如图3所示,提供了一种数据传输方法,包括以下步骤:

步骤S310,接收对端发送的数据包。

具体地,本端接收对端发送的数据包,其中,本端指的是接收数据的那端,对端指的是发送数据的那端,本端和对端仅是一个相对的关系,本端和对端可以为外置的MODEM、包含有内置MODEM的计算机及手机等终端,也可以是MODEM通讯中通过电话线进行数据传输的两个节点等。本端可在预设的接收时限内,根据通讯协议约定的包格式中的首尾定界符及长度域等字段接收数据包,若本端在预设的接收时限内未接收到对端发送的数据包,可向对端重新发送最近的数据包并继续接收对端发送的数据包,也可直接继续接收对端发送的数据包。

如图4所示,在一个实施例中,在步骤S310接收对端发送的数据包之前,还包括以下步骤:

步骤S402,获取通讯协议中约定的重发最大次数及数据包最大长度。

具体地,通讯协议可以是ASCII、Xmodem、Ymodem、Zmodem等MODEM协议中的一种,可根据实际需求采用相应的通讯协议进行数据传输。通讯协议中约定有包格式、数据包最大长度及重发最大次数等。

步骤S404,根据重发最大次数及数据包最大长度分配缓存空间。

具体地,本端可根据通讯协议中约定的重发最大次数及数据包最大长度等信息分配缓存空间,用于存储数据传输过程中接收到的误码包、误码包的长度及误码包的个数等数据。例如,某通讯协议中约定的重发最大次数为10次,数据包最大长度为2048字节,则应分配的缓存可包括:char merge_buf_data[11][2048],用于依次存储每次接收的误码包数据;unsigned int merge_buf_len[11],用于依次存储每次接收的误码包的长度等。

本端可在通讯开始时就根据通讯协议中约定的重发最大次数及数据包最大长度分配缓存空间,当每次成功得到正确的数据包,完成本次接收过程后,本端可清空缓存空间中存储的数据,并进行下一次接收过程,缓存空间可用于存储下一次接收过程中接收到的误码包、误码包的长度及误码包的个数等数据。

步骤S320,对数据包进行校验,检测数据包是否为误码包,若是,则执行步骤S330,若否,则执行步骤S360。

具体地,本端接收对端发送的数据包后,可先根据通讯协议中约定的包格式及数据包最大长度等对数据包进行格式校验,再提取数据包中的校验码对数据包进行校验码校验,其中,校验码校验可包括CRC(Cyclic Redundancy Check,循环冗余校验)、MAC(Message Authentication Code,消息认证码)等校验方法。若数据包校验通过,可输出该数据包,完成本次接收过程。

步骤S330,存储误码包。

具体地,若数据包校验不通过,则说明该数据包为误码包,则可将误码包存储在预先分配的缓存中,可同时存储误码包的长度等信息。本端存储误码包后,可向对端重新发送最近的数据包或向对端发送请求对端重传的消息包,也可直接等待对端因在响应时间内未接收到本端返回的响应而重新发送的数据包,可以理解地,本端重新接收对端发送的数据包的方式需按照MODEM通讯中采用的通讯协议约定的方式。

步骤S340,判断重新接收对端发送的数据包的次数是否大于预设阈值,若是,则执行步骤S350,若否,则执行步骤S310。

具体地,本端重新接收对端发送的数据包后,可对数据包进行校验,若数据包校验不通过,则说明该重新接收的数据包依然为误码包,存储该误码包后继续重新接收对端发送的数据包,直至重新接收的数据包通过校验或重新接收对端发送的数据包的次数大于预设阈值。

步骤S350,根据存储的多个误码包拼凑得到正确的数据包。

具体地,若本端重新接收对端发送的数据包的次数大于预设阈值,则预先分配的缓存中存储有本端在本次接收过程中每次从对端接收到的误码包,例如,本端重新接收对端发送的数据包的次数为3次,则预先分配的缓存中存储有4个误码包。本端可对存储的多个误码包进行逐字节比较,根据同一字节下的值在各个误码包中的出现频率选取各个字节的值,拼凑得到正确的数据包。

步骤S360,输出正确的数据包。

具体地,若本端接收的数据包校验通过,或是本端根据存储的多个误码包拼凑得到正确的数据包,可输出正确的数据包,输出的方式可包括API(Application Programming Interface,应用程序编程接口)调用、通讯端口输出等,可根据实际需求选择相应的输出方式进行输出。

上述数据传输方法,接收对端发送的数据包,对数据包进行校验,若数据包被检测为误码包,则存储该误码包,并重新接收对端发送的数据包,当重新接收对端发送的数据包的次数大于预设阈值时,根据存储的多个误码包拼凑得到正确的数据包,即使因准周期性的信号干扰而导致接收的每个数据包发生误码一直无法校验通过,也依然可以得到正确的数据包,能够保证通讯正常,提高通讯效果。

如图5所示,在一个实施例中,步骤S350根据存储的多个误码包拼凑得到正确的数据包,包括以下步骤:

步骤S502,获取存储的多个误码包的长度。

具体地,若本端重新接收对端发送的数据包的次数大于预设阈值,则可根据存储的多个误码包拼凑得到正确的数据包。预先分配的缓存空间中依次存储有本次接收过程中接收到的多个误码包,以及与各个误码包对应的长度。

步骤S504,若长度相等的误码包的个数大于预设个数,则提取长度相等的误码包。

具体地,本端可获取缓存中依次存储的每次接收的误码包的长度,并判断长度相等的误码包的个数是否大于预设个数。若长度相等的误码包的个数不大于预设个数,则本端需重新接收对端发送的数据包。若长度相等的误码包的个数大于预设个数,则可从缓存空间中提取长度相等的误码包。例如,本端在缓存中存储有4个误码包,误码包1的长度为10,误码包2的长度为9,误码包3的长度为10,误码包4的长度为10,其中,长度相等的误码包个数大于预设个数2,则本端可从缓存中提取误码包1、误码包3及误码包4。

步骤S506,逐字节对提取的各个误码包进行比较,判断同一字节下提取的各个误码包的值是否相同,若是,则执行步骤S508,若否,则执行步骤S510。

具体地,本端可对提取的各个误码包进行逐字节比较,并判断同一字节下提取的各个误码包的值是否相同。

步骤S508,选取具有相同值的字节下提取的各个误码包中相同的值。

具体地,若同一字节下提取的各个误码包的值相同,则本端可选取该字节下提取的各个误码包中相同的值,作为最终拼凑得到的数据包中该字节中的值。

步骤S510,选取具有不同值的字节下提取的各个误码包中出现次数大于预设次数的值。

具体地,若同一字节下提取的各个误码包的值不同,则本端可选取该字节下提取的各个误码包中出现次数大于预设次数的值,例如出现次数大于1次的值或是出现次数大于2次的值等,作为最终拼凑得到的数据包中该字节中的值。若具有不同值的字节下提取的各个误码包中出现次数大于预设次数的值为多个,例如,同一字节下出现次数大于2次的值有2个,则可获取提取的各个误码包的存储顺序,并根据提取的各个码误包的存储顺序选取该字节下最先出现的值,作为最终拼凑得到的数据包中该字节中的值。

在其它的实施例中,若同一字节下提取的各个误码包的值不同,本端也可直接选取该字节下提取的各个误码包中出现次数最多的值,作为最终拼凑得到的数据包中该字节中的值。

步骤S512,根据各个字节下选取的值拼凑得到数据包。

具体地,本端对提取的各个误码包进行逐字节比较后,可根据各个字节下选取的值拼凑得到数据包。例如,提取的长度相等的误码包可包括:

误码包1:02 00 0A 00e1 02 03 04 05 06 07 08 09 51 6C;

误码包2:02 00 0A 00 01 02 03 04 0A 06 07 08 09 51 6C;

误码包3:02 00 0A 00 01 02 03 04 05 06 07 08 1B 51 6C;

误码包4:02 00 0A 00 01 02 03 04 05 06e1 08 09 51 6C。

其中,第1个字节4个误码包的值均为02,则选取02作为最终拼凑得到的数据包中第1个字节的值;第2个字节4个误码包的值均为00,则选取00作为最终拼凑得到的数据包中第2个字节的值;第3字节、第4字节同上;第5个字节中误码包1的值为e1,误码包2、误码包3及误码包4的值为01,存在差异,其中01出现的次数大于预设次数2,则选取01作为最终拼凑得到的数据包中第5个字节的值,余下的各字节比较方式同上,在此不一一赘述。最终可拼凑得到的数据包为:02 00 0A 00 01 02 03 04 05 06 07 08 09 51 6C。

在本实施例中,可提取长度相等的数据包进行逐字节比较,根据比较结果拼凑得到数据包,即使因准周期性的信号干扰而导致接收的每个数据包发生误码一直无法校验通过,也依然可以得到正确的数据包,能够保证通讯正常,提高通讯效果。

如图6所示,在步骤S512根据各个字节下选取的值拼凑得到数据包之后,还包括以下步骤:

步骤S514,提取拼凑得到的数据包中的校验码对拼凑得到的数据包进行校验。

具体地,本端提取长度相等的数据包进行逐字节比较,选取各个字节的值,并根据选取的各个字节的值拼凑得到数据包后,可提取拼凑得到的数据包中的校验码对拼凑得到的数据包进行校验。若校验通过,则拼凑得到的数据包即为正确的数据包,可输出该正确的数据包,结束本次接收过程。若校验失败,则说明拼凑得到的数据包不是正确的数据包,本端重新接收对端发送的数据包,若重新接收的数据包依然为误码包,存储该误码包后,可按照上述步骤S502~步骤S512的过程重新拼凑得到数据包。

步骤S516,若校验通过,则拼凑得到的数据包为正确的数据包。

步骤S518,若校验失败,则重新接收对端发送的数据包。

步骤S520,当重新接收对端发送的数据包的次数达到预设限定值时,则发送重试超限指令。

具体地,若本端一直无法接收到校验通过的数据包,也无法根据存储的误码包拼凑得到正确的数据包,需一直重新接收对端发送的数据包,当本端重新接收对端发送的数据包达到预设限定值时,可发送重试超限指令通知网络层,由网络层决定是否中止通讯,其中,预设限定值可与通讯协议中约定的重发最大次数相同,也可根据实际需求重新进行设定,但预设限定值应小于或等于重发最大次数。

可以理解地,上述数据传输方法并不限于应用在MODEM通讯中,在其它的通讯方式中一样适用。

在本实施例中,对拼凑得到的数据包进行校验码校验,可进一步保证拼凑得到的数据包的正确性,能在被准周期性的信号干扰时成功得到正确的数据包,保证通讯正常,提高通讯效果。

如图7所示,提供了一种数据传输装置,包括接收模块710、校验模块720、存储模块730及拼包模块740。

接收模块710,用于接收对端发送的数据包。

校验模块720,用于对数据包进行校验,检测数据包是否为误码包。

存储模块730,用于若数据包为误码包,则存储误码包,并通过接收模块重新接收对端发送的数据包。

拼包模块740,用于当重新接收对端发送的数据包的次数大于预设阈值时,根据存储的多个误码包拼凑得到正确的数据包。

在一个实施例中,上述数据传输装置,还包括输出模块,用于输出正确的数据包。

上述数据传输装置,接收对端发送的数据包,对数据包进行校验,若数据包被检测为误码包,则存储该误码包,并重新接收对端发送的数据包,当重新接收对端发送的数据包的次数大于预设阈值时,根据存储的多个误码包拼凑得到正确的数据包,即使因准周期性的信号干扰而导致接收的每个数据包发生误码一直无法校验通过,也依然可以得到正确的数据包,能够保证通讯正常,提高通讯效果。

如图8所示,在一个实施例中,上述数据传输装置,除了包括接收模块710、校验模块720、存储模块730及拼包模块740,还包括获取模块750及分配模块760。

获取模块750,用于获取通讯协议中约定的重发最大次数及数据包最大长度。

分配模块760,用于根据重发最大次数及数据包最大长度分配缓存空间。

在本实施例中,预先根据通讯协议中约定的重发最大次数及数据包最大长度分配缓存空间,用于存储接收到的误码包,方便后续根据误码包拼凑得到正确的数据包,保证在被准周期性的信号干扰时通讯正常,提取通讯效果。

如图9所示,在一个实施例中,拼包模块740包括长度获取单元902、提取单元904、比较单元906、选取单元908及拼凑单元910。

长度获取单元902,用于获取存储的多个误码包的长度。

提取单元904,用于若长度相等的误码包的个数大于预设个数,则提取长度相等的误码包。

比较单元906,用于逐字节对提取的各个误码包进行比较,判断同一字节下提取的各个误码包的值是否相同。

选取单元908,用于若同一字节下提取的各个误码包的值相同,则选取具有相同值的字节下提取的各个误码包中相同的值。

选取单元908,还用于若同一字节下提取的各个误码包的值不同,则选取具有不同值的字节下提取的各个误码包中出现次数大于预设次数的值。

在一个实施例中,选取单元908,还用于若具有不同值的字节下提取的各个误码包中出现次数大于预设次数的值为多个,则根据提取的各个误码包的存储顺序从出现次数大于预设次数的多个值中选取最先出现的值。

拼凑单元910,用于根据各个字节下选取的值拼凑得到数据包。

在本实施例中,可提取长度相等的数据包进行逐字节比较,根据比较结果拼凑得到数据包,即使因准周期性的信号干扰而导致接收的每个数据包发生误码一直无法校验通过,也依然可以得到正确的数据包,能够保证通讯正常,提高通讯效果。

如图10所示,在一个实施例中,拼包模块740除了包括长度获取单元902、提取单元904、比较单元906、选取单元908及拼凑单元910,还包括校验单元912及发送单元914。

校验单元912,用于提取拼凑得到的数据包中的校验码对拼凑得到的数据包进行校验,若校验通过,则拼凑得到的数据包为正确的数据包,若校验失败,则通过接收模块重新接收对端发送的数据包。

发送单元914,用于当重新接收对端发送的数据包的次数达到预设限定值时,则发送重试超限指令。

在本实施例中,对拼凑得到的数据包进行校验码校验,可进一步保证拼凑得到的数据包的正确性,能在被准周期性的信号干扰时成功得到正确的数据包,保证通讯正常,提高通讯效果。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1