一种避免数据粘包的处理装置及方法

文档序号:6433011阅读:202来源:国知局
专利名称:一种避免数据粘包的处理装置及方法
技术领域
本发明涉及计算机应用领域中数据传输技术,尤其涉及避免数据传输过程中出现数据粘包的处理装置及方法。
背景技术
随着计算机和通讯技术的不断发展,计算机与通讯线路及设备结合起来实现人与计算机、计算机与计算机(M2M,Machine-to-Machine)之间的数据通讯,不仅使各用户计算机的利用率大大提高,而且极大地扩展了计算机的应用范围,并可使各用户实现计算机软硬件资源与数据资源的共享。对计算机的远距离实时控制和对数据的远距离收集等工作, 也都可以利用数据通讯来实现。在数据通讯的过程中,由于通道的阻塞等多方面的原因都会出现接收数据粘包的现象。粘包是指发送方发送的若干包数据,到接收方接收时被粘成一个包。通常,数据粘包的情况有两种,一种是粘在一起的数据包都是完整的数据包,另一种情况是粘在一起的数据包中有不完整的数据包。以往针对数据粘包的解决方法一般采用短连接的方式,该方式适合单条数据的交互,并且该方式会使得通讯效率降低。当在一去多回的数据交互方式下出现数据粘包现象时,通常用该方式会放弃一些数据。因此,该方式在串口通讯和有线通讯上尚可使用,但在无线通讯这种按流量计费的方式下则无法使用。综上所述可知,需要一种既能使用在无线通讯上节约成本同时又能提高通讯效率的避免数据粘包的处理方法。

发明内容
本发明所要解决的技术问题是提供一种处理数据粘包的方法及装置,能够保证数据完整性并方便地应用在无线通讯上。为了解决上述技术问题,本发明提供了一种避免数据粘包的处理装置,包括数据接收模块、缓存模块以及数据提取模块,其中数据接收模块,用于在缓存模块的数据写锁打开时,将接收的数据写入缓存模块的空闲空间内,并控制数据读锁打开;缓存模块,用于内置互斥的数据写锁和所述数据读锁,并向数据接收模块提供缓存数据的缓存空间;数据提取模块,用于在缓存模块的数据读锁打开时,从缓存模块的缓存数据空间提取完整的数据,并控制数据写锁打开。进一步地,缓存模块提供的缓存空间,至少要能保存数据传输协议所规定的最大数据长度的 4至8条数据。进一步地,
数据接收模块在向缓存模块写入数据时,根据数据传输协议的固定位置获取接收数据的长度信息,根据该长度信息从由第一标识标记的空闲空间的起始地址开始写入接收的全部数据,并将该第一标识置为写入接收的全部数据的下一位地址;数据提取模块在从缓存模块提取数据时,根据接收数据的长度信息从由第二标识标记的缓存数据空间的起始地址开始提取完整的数据,并将该第二标识置为提取完整的数据的下一位地址。进一步地,数据接收模块在缓存模块从由第一标识标记的起始地址开始到缓存结尾的空闲空间不足以写入接收的全部数据时,根据数据的长度信息先从由第一标识标记的起始地址开始写入数据,并将剩余的数据写入到缓存模块起始的空闲空间,然后将第一标识更新为写入接收的全部数据的下一位地址;数据提取模块在缓存模块从由第二标识标记的起始地址开始到缓存结尾的缓存数据空间不足以提取完整的数据时,根据数据的长度信息先从由第二标识标记的起始地址开始提取数据,并将剩余的缓存数据从缓存模块起始的缓存数据空间中提取,然后将第二标识更新为提取完整的数据的下一位地址。为了解决上述技术问题,本发明提供了一种避免数据粘包的处理方法,涉及数据接收线程和数据提取线程,该方法包括数据接收线程在缓存的数据写锁打开时,将接收的数据写入缓存的空闲空间内, 并控制数据读锁打开;和/或数据提取线程在缓存的数据读锁打开时,从缓存的数据空间提取完整的数据,并控制数据写锁打开。进一步地,缓存提供的缓存空间,至少要能保存数据传输协议所规定的最大数据长度的4至8条数据。进一步地,数据接收流程将接收的全部据写入缓存的空闲空间内,具体包括根据数据传输协议的固定位置获取接收数据的长度信息,根据该长度信息从由第一标识标记的空闲空间的起始地址开始写入接收的全部数据,并将该第一标识置为写入接收的全部数据的下一位地址。进一步地,数据提取线程从缓存的数据空间提取完整的数据,具体包括根据接收数据的长度信息从由第二标识标记的缓存数据空间的起始地址开始提取完整的数据,并将该第二标识置为提取完整的数据的下一位地址。进一步地,当数据接收线程在所述缓存从由第一标识标记的起始地址开始到缓存结尾的空闲空间不足以写入接收的全部数据时,根据接收数据的长度信息先从由第一标识标记的起始地址开始写入数据,并将剩余的数据写入到缓存起始的空闲空间,然后将第一标识更新为写入接收的全部数据的下一位地址。进一步地,当数据提取线程在缓存从由第二标识标记的起始地址开始到缓存结尾的缓存数据空间不足以提取完整的数据时,根据接收数据的长度信息先从由第二标识标记的起始地址开始提取数据,并将剩余的缓存数据从缓存起始的缓存数据空间中提取,然后将第二标识更新为提取完整的数据的下一位地址。
本发明提供的避免数据粘包的处理装置及方法,能够在保证数据完整性的前提下提高了通讯效率,同时又方便地使用在无线通讯上,从而节约了系统成本。


图1为本发明的处理数据粘包的装置实施例的结构示意图;图2为本发明当缓存剩余空闲空间长度小于接收的数据容量时写入缓存的方法实施例示意图;图3为本发明当缓存剩余的缓存数据空间长度小于提取的数据容量时从缓存提取数据的方法实施例示意图。
具体实施例方式以下结合附图和优选实施例对本发明的技术方案进行详细地阐述。应该理解,以下例举的实施例仅用于说明和解释本发明,而不构成对本发明技术方案的限制。本发明提供的处理数据粘包的装置实施例,其结构如图1所示,包括数据接收模块、缓存模块以及数据提取模块,其中数据接收模块,用于在缓存模块的数据写锁打开时,将接收的数据写入缓存模块的空闲空间内,并控制数据读锁打开;缓存模块,用于内置互斥的数据写锁和数据读锁,并向数据接收模块提供缓存数据的空闲空间;数据提取模块,用于在缓存模块的数据读锁打开时,从缓存模块缓存数据空间提取完整的数据,并控制数据写锁打开。在上述装置实施例中,缓存模块提供的缓存空间,至少要能保存数据传输协议所规定的最大数据长度的多条数据。 譬如,数据传输协议规定的数据长度有8字节、16字节以及32字节,则缓存模块提供的缓存空间至少保存该数据传输协议所规定的最大的32字节数据长度的4至8条数据。在上述装置实施例中,数据接收模块在向缓存模块写入数据时,根据数据传输协议的固定位置获取接收数据的长度信息,根据该长度信息从由第一标识标记的空闲空间的起始地址开始写入接收的全部数据,并将该第一标识置为写入接收的全部数数据的下一位地址;数据提取模块在从缓存模块提取数据时,根据数据的长度信息从由第二标识标记的缓存数据空间的起始地址开始提取完整的数据,并将该第二标识置为提取完整的数据的下一位地址。在上述装置实施例中,数据接收模块在缓存模块从由第一标识标记的起始地址开始到缓存结尾的空闲空间不足以写入接收的全部数据时,根据数据的长度信息先从由第一标识标记的起始地址开始写入数据,并将剩余的数据写入到缓存模块起始的空闲空间(注意,此时数据提取模块已经将数据提取,使得缓存的开始部分已经空闲),然后将第一标识更新为写入接收的全部数据的下一位地址。
例如,数据接收模块接收到一个具有8个字节长度的数据,而从由第一标识标记的空闲空间的起始地址开始到缓存结尾只有5个字节,则先将接收的5个字节的数据写入这5个字节中,并将剩余的3个字节的数据写入缓存模块起始的3个空闲空间中,然后将第一标识更新为写入数据的下一位地址,如图2所示。同理,数据提取模块在缓存模块从由第二标识标记的起始地址开始到缓存结尾的缓存数据空间不足以提取完整的数据时,根据数据的长度信息先从由第二标识标记的起始地址开始提取数据,并将剩余的缓存数据从缓存模块起始的缓存数据空间中提取,然后将第二标识更新为提取完整的数据的下一位地址,如图3所示。本发明针对上述装置实施例,相应地还提供了避免数据粘包的处理方法实施例, 涉及数据接收线程和数据提取线程,该方法包括数据接收线程在缓存的数据写锁打开时,将接收的数据写入缓存的空闲空间内, 并控制数据读锁打开;和/或数据提取线程在缓存的数据读锁打开时,从缓存的数据空间提取完整的数据,并控制数据写锁打开。在上述方法实施例中,缓存提供的缓存空间,至少要能保存数据传输协议所规定的最大数据长度的多条数据。在上述方法实施例中,数据接收流程将接收的全部数据写入缓存的空闲空间内,具体包括根据数据传输协议的固定位置获取接收数据的长度信息,根据该长度信息从由第一标识标记的空闲空间的起始地址开始写入接收的全部数据,并将该第一标识置为写入接收的全部数据的下一位地址。在上述方法实施例中,数据提取线程从缓存的数据空间提取完整的数据,具体包括根据数据的长度信息从由第二标识标记的缓存数据空间的起始地址开始提取完整的数据,并将该第二标识置为提取完整的数据的下一位地址。在上述方法实施例中,数据接收线程在缓存从由第一标识标记的起始地址开始到缓存结尾的空闲空间不足以写入接收的全部数据时,根据数据的长度信息先从由第一标识标记的起始地址开始写入数据,并将剩余的数据写入到缓存起始的空闲空间,然后将第一标识更新为写入接收的全部数据的下一位地址。在上述方法实施例中,数据提取线程在缓存从由第二标识标记的起始地址开始到缓存结尾的缓存数据空间不足以提取完整的数据时,根据数据的长度信息先从由第二标识标记的起始地址开始提取数据,并将剩余的缓存数据从缓存起始的缓存数据空间中提取,然后将第二标识更新为提取完整的数据的下一位地址。本发明的上述装置实施例和方法实施例,在能够确保数据的完整性的前提下,提高了通讯效率,同时又方便地使用在无线通讯上,从而节约了系统成本。对于本领域的专业人员来说,在了解了本发明内容和原理后,能够在不背离本发明的原理和范围的情况下,根据本发明的方法进行形式和细节上的各种修正和改变,但是这些基于本发明的修正和改变仍在本发明的权利要求保护范围之内。
权利要求
1.一种避免数据粘包的处理装置,其特征在于,包括数据接收模块、缓存模块以及数据提取模块,其中数据接收模块,用于在缓存模块的数据写锁打开时,将接收的数据写入缓存模块的空闲空间内,并控制数据读锁打开;缓存模块,用于内置互斥的所述数据写锁和所述数据读锁,并向数据接收模块提供缓存数据的缓存空间;数据提取模块,用于在缓存模块的所述数据读锁打开时,从缓存模块的缓存数据空间提取完整的数据,并控制所述数据写锁打开。
2.按照权利要求1所述的装置,其特征在于,所述缓存模块提供的所述缓存空间,至少要能保存数据传输协议所规定的最大数据长度的4至8条数据。
3.按照权利要求2所述的装置,其特征在于,所述数据接收模块在向所述缓存模块写入数据时,根据所述数据传输协议的固定位置获取接收数据的长度信息,根据该长度信息从由第一标识标记的空闲空间的起始地址开始写入接收的全部数据,并将该第一标识置为写入接收的全部数据的下一位地址;所述数据提取模块在从所述缓存模块提取数据时,根据所述接收数据的长度信息从由第二标识标记的缓存数据空间的起始地址开始提取完整的数据,并将该第二标识置为提取完整的数据的下一位地址。
4.按照权利要求3所述的装置,其特征在于,所述数据接收模块在所述缓存模块从由第一标识标记的起始地址开始到缓存结尾的空闲空间不足以写入接收的全部数据时,根据数据的长度信息先从由第一标识标记的起始地址开始写入数据,并将剩余的数据写入到缓存模块起始的空闲空间,然后将第一标识更新为写入接收的全部数据的下一位地址;所述数据提取模块在所述缓存模块从由第二标识标记的起始地址开始到缓存结尾的缓存数据空间不足以提取完整的数据时,根据数据的长度信息先从由第二标识标记的起始地址开始提取数据,并将剩余的缓存数据从所述缓存模块起始的缓存数据空间中提取,然后将第二标识更新为提取完整的数据的下一位地址。
5.一种避免数据粘包的处理方法,涉及数据接收线程和数据提取线程,该方法包括数据接收线程在缓存的数据写锁打开时,将接收的数据写入缓存的空闲空间内,并控制数据读锁打开;和/或数据提取线程在所述缓存的所述数据读锁打开时,从缓存的数据空间提取完整的数据,并控制所述数据写锁打开。
6.按照权利要求5所述的方法,其特征在于,所述缓存提供的缓存空间,至少要能保存数据传输协议所规定的最大数据长度的4至8条数据。
7.按照权利要求6所述的方法,其特征在于,所述数据接收流程将接收的全部据写入缓存的空闲空间内,具体包括根据数据传输协议的固定位置获取接收数据的长度信息,根据该长度信息从由第一标识标记的空闲空间的起始地址开始写入接收的全部数据,并将该第一标识置为写入接收的全部数据的下一位地址。
8.按照权利要求6所述的方法,其特征在于,所述数据提取线程从缓存的数据空间提取完整的数据,具体包括根据所述接收数据的长度信息从由第二标识标记的缓存数据空间的起始地址开始提取完整的数据,并将该第二标识置为提取完整的数据的下一位地址。
9.按照权利要求7所述的方法,其特征在于,当所述数据接收线程在所述缓存从由第一标识标记的起始地址开始到缓存结尾的空闲空间不足以写入接收的全部数据时,根据所述接收数据的长度信息先从由第一标识标记的起始地址开始写入数据,并将剩余的数据写入到缓存起始的空闲空间,然后将第一标识更新为写入接收的全部数据的下一位地址。
10.按照权利要求8所述的方法,其特征在于,当所述数据提取线程在所述缓存从由第二标识标记的起始地址开始到缓存结尾的缓存数据空间不足以提取完整的数据时,根据所述接收数据的长度信息先从由第二标识标记的起始地址开始提取数据,并将剩余的缓存数据从缓存起始的缓存数据空间中提取,然后将第二标识更新为提取完整的数据的下一位地址。
全文摘要
本发明披露了一种避免数据粘包的处理装置及方法,其中装置包括数据接收模块在缓存模块的数据写锁打开时,将接收的数据写入缓存模块的空闲空间内,并控制数据读锁打开;缓存模块内置互斥的数据写锁和数据读锁,并向数据接收模块提供缓存数据的缓存空间;数据提取模块在缓存模块的数据读锁打开时,从缓存模块的缓存数据空间提取完整的数据,并控制数据写锁打开。本发明提供的避免数据粘包的处理装置及方法,能够在保证数据完整性的前提下提高了通讯效率,同时又方便地使用在无线通讯上,从而节约了系统成本。
文档编号G06F12/08GK102325010SQ20111026923
公开日2012年1月18日 申请日期2011年9月13日 优先权日2011年9月13日
发明者刘正伟, 张道伟, 文中领 申请人:浪潮(北京)电子信息产业有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1