CN102325010A - 一种避免数据粘包的处理装置及方法 - Google Patents
一种避免数据粘包的处理装置及方法 Download PDFInfo
- Publication number
- CN102325010A CN102325010A CN201110269231A CN201110269231A CN102325010A CN 102325010 A CN102325010 A CN 102325010A CN 201110269231 A CN201110269231 A CN 201110269231A CN 201110269231 A CN201110269231 A CN 201110269231A CN 102325010 A CN102325010 A CN 102325010A
- Authority
- CN
- China
- Prior art keywords
- data
- reception
- buffer memory
- module
- write
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明披露了一种避免数据粘包的处理装置及方法,其中装置包括:数据接收模块在缓存模块的数据写锁打开时,将接收的数据写入缓存模块的空闲空间内,并控制数据读锁打开;缓存模块内置互斥的数据写锁和数据读锁,并向数据接收模块提供缓存数据的缓存空间;数据提取模块在缓存模块的数据读锁打开时,从缓存模块的缓存数据空间提取完整的数据,并控制数据写锁打开。本发明提供的避免数据粘包的处理装置及方法,能够在保证数据完整性的前提下提高了通讯效率,同时又方便地使用在无线通讯上,从而节约了系统成本。
Description
技术领域
本发明涉及计算机应用领域中数据传输技术,尤其涉及避免数据传输过程中出现数据粘包的处理装置及方法。
背景技术
随着计算机和通讯技术的不断发展,计算机与通讯线路及设备结合起来实现人与计算机、计算机与计算机(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所示。
本发明针对上述装置实施例,相应地还提供了避免数据粘包的处理方法实施例,涉及数据接收线程和数据提取线程,该方法包括:
数据接收线程在缓存的数据写锁打开时,将接收的数据写入缓存的空闲空间内,并控制数据读锁打开;和/或数据提取线程在缓存的数据读锁打开时,从缓存的数据空间提取完整的数据,并控制数据写锁打开。
在上述方法实施例中,
缓存提供的缓存空间,至少要能保存数据传输协议所规定的最大数据长度的多条数据。
在上述方法实施例中,
数据接收流程将接收的全部数据写入缓存的空闲空间内,具体包括:
根据数据传输协议的固定位置获取接收数据的长度信息,根据该长度信息从由第一标识标记的空闲空间的起始地址开始写入接收的全部数据,并将该第一标识置为写入接收的全部数据的下一位地址。
在上述方法实施例中,
数据提取线程从缓存的数据空间提取完整的数据,具体包括:
根据数据的长度信息从由第二标识标记的缓存数据空间的起始地址开始提取完整的数据,并将该第二标识置为提取完整的数据的下一位地址。
在上述方法实施例中,
数据接收线程在缓存从由第一标识标记的起始地址开始到缓存结尾的空闲空间不足以写入接收的全部数据时,根据数据的长度信息先从由第一标识标记的起始地址开始写入数据,并将剩余的数据写入到缓存起始的空闲空间,然后将第一标识更新为写入接收的全部数据的下一位地址。
在上述方法实施例中,
数据提取线程在缓存从由第二标识标记的起始地址开始到缓存结尾的缓存数据空间不足以提取完整的数据时,根据数据的长度信息先从由第二标识标记的起始地址开始提取数据,并将剩余的缓存数据从缓存起始的缓存数据空间中提取,然后将第二标识更新为提取完整的数据的下一位地址。
本发明的上述装置实施例和方法实施例,在能够确保数据的完整性的前提下,提高了通讯效率,同时又方便地使用在无线通讯上,从而节约了系统成本。
对于本领域的专业人员来说,在了解了本发明内容和原理后,能够在不背离本发明的原理和范围的情况下,根据本发明的方法进行形式和细节上的各种修正和改变,但是这些基于本发明的修正和改变仍在本发明的权利要求保护范围之内。
Claims (10)
1.一种避免数据粘包的处理装置,其特征在于,包括数据接收模块、缓存模块以及数据提取模块,其中:
数据接收模块,用于在缓存模块的数据写锁打开时,将接收的数据写入缓存模块的空闲空间内,并控制数据读锁打开;
缓存模块,用于内置互斥的所述数据写锁和所述数据读锁,并向数据接收模块提供缓存数据的缓存空间;
数据提取模块,用于在缓存模块的所述数据读锁打开时,从缓存模块的缓存数据空间提取完整的数据,并控制所述数据写锁打开。
2.按照权利要求1所述的装置,其特征在于,
所述缓存模块提供的所述缓存空间,至少要能保存数据传输协议所规定的最大数据长度的4至8条数据。
3.按照权利要求2所述的装置,其特征在于,
所述数据接收模块在向所述缓存模块写入数据时,根据所述数据传输协议的固定位置获取接收数据的长度信息,根据该长度信息从由第一标识标记的空闲空间的起始地址开始写入接收的全部数据,并将该第一标识置为写入接收的全部数据的下一位地址;
所述数据提取模块在从所述缓存模块提取数据时,根据所述接收数据的长度信息从由第二标识标记的缓存数据空间的起始地址开始提取完整的数据,并将该第二标识置为提取完整的数据的下一位地址。
4.按照权利要求3所述的装置,其特征在于,
所述数据接收模块在所述缓存模块从由第一标识标记的起始地址开始到缓存结尾的空闲空间不足以写入接收的全部数据时,根据数据的长度信息先从由第一标识标记的起始地址开始写入数据,并将剩余的数据写入到缓存模块起始的空闲空间,然后将第一标识更新为写入接收的全部数据的下一位地址;
所述数据提取模块在所述缓存模块从由第二标识标记的起始地址开始到缓存结尾的缓存数据空间不足以提取完整的数据时,根据数据的长度信息先从由第二标识标记的起始地址开始提取数据,并将剩余的缓存数据从所述缓存模块起始的缓存数据空间中提取,然后将第二标识更新为提取完整的数据的下一位地址。
5.一种避免数据粘包的处理方法,涉及数据接收线程和数据提取线程,该方法包括:
数据接收线程在缓存的数据写锁打开时,将接收的数据写入缓存的空闲空间内,并控制数据读锁打开;和/或数据提取线程在所述缓存的所述数据读锁打开时,从缓存的数据空间提取完整的数据,并控制所述数据写锁打开。
6.按照权利要求5所述的方法,其特征在于,所述缓存提供的缓存空间,至少要能保存数据传输协议所规定的最大数据长度的4至8条数据。
7.按照权利要求6所述的方法,其特征在于,所述数据接收流程将接收的全部据写入缓存的空闲空间内,具体包括:
根据数据传输协议的固定位置获取接收数据的长度信息,根据该长度信息从由第一标识标记的空闲空间的起始地址开始写入接收的全部数据,并将该第一标识置为写入接收的全部数据的下一位地址。
8.按照权利要求6所述的方法,其特征在于,所述数据提取线程从缓存的数据空间提取完整的数据,具体包括:
根据所述接收数据的长度信息从由第二标识标记的缓存数据空间的起始地址开始提取完整的数据,并将该第二标识置为提取完整的数据的下一位地址。
9.按照权利要求7所述的方法,其特征在于,
当所述数据接收线程在所述缓存从由第一标识标记的起始地址开始到缓存结尾的空闲空间不足以写入接收的全部数据时,根据所述接收数据的长度信息先从由第一标识标记的起始地址开始写入数据,并将剩余的数据写入到缓存起始的空闲空间,然后将第一标识更新为写入接收的全部数据的下一位地址。
10.按照权利要求8所述的方法,其特征在于,
当所述数据提取线程在所述缓存从由第二标识标记的起始地址开始到缓存结尾的缓存数据空间不足以提取完整的数据时,根据所述接收数据的长度信息先从由第二标识标记的起始地址开始提取数据,并将剩余的缓存数据从缓存起始的缓存数据空间中提取,然后将第二标识更新为提取完整的数据的下一位地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110269231A CN102325010A (zh) | 2011-09-13 | 2011-09-13 | 一种避免数据粘包的处理装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110269231A CN102325010A (zh) | 2011-09-13 | 2011-09-13 | 一种避免数据粘包的处理装置及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102325010A true CN102325010A (zh) | 2012-01-18 |
Family
ID=45452686
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110269231A Pending CN102325010A (zh) | 2011-09-13 | 2011-09-13 | 一种避免数据粘包的处理装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102325010A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103957284A (zh) * | 2014-04-04 | 2014-07-30 | 上海聚流软件科技有限公司 | Dns行为的处理方法、装置及系统 |
CN103957239A (zh) * | 2014-04-04 | 2014-07-30 | 上海聚流软件科技有限公司 | Dns缓存信息处理方法、设备及系统 |
CN105912479A (zh) * | 2016-04-07 | 2016-08-31 | 武汉数字派特科技有限公司 | 一种并发数据的缓存方法及结构 |
CN105991223A (zh) * | 2015-02-13 | 2016-10-05 | Tcl集团股份有限公司 | 一种tcp网络传输数据中防粘包的方法及系统 |
CN106372008A (zh) * | 2015-07-23 | 2017-02-01 | 福州瑞芯微电子股份有限公司 | 一种数据缓存方法及装置 |
CN107026713A (zh) * | 2017-03-17 | 2017-08-08 | 广东蜂助手网络技术股份有限公司 | 一种在网络通讯包粘连的情况下提高网络速度的方法 |
CN108200024A (zh) * | 2017-12-26 | 2018-06-22 | 盛科网络(苏州)有限公司 | 一种以太网报文编辑装置及方法 |
CN109933543A (zh) * | 2019-03-11 | 2019-06-25 | 珠海市杰理科技股份有限公司 | Cache的数据锁定方法、装置和计算机设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101753586A (zh) * | 2010-01-20 | 2010-06-23 | 北京数码视讯科技股份有限公司 | 发送数据的方法、接收数据的处理方法和装置 |
-
2011
- 2011-09-13 CN CN201110269231A patent/CN102325010A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101753586A (zh) * | 2010-01-20 | 2010-06-23 | 北京数码视讯科技股份有限公司 | 发送数据的方法、接收数据的处理方法和装置 |
Non-Patent Citations (1)
Title |
---|
网易博客: "TCP粘包处理-RingBuf方法", 《网易博客》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9930005B2 (en) | 2014-04-04 | 2018-03-27 | Beijing Qihoo Technology Limited | Method, device and system for processing DNS cache information |
CN103957239A (zh) * | 2014-04-04 | 2014-07-30 | 上海聚流软件科技有限公司 | Dns缓存信息处理方法、设备及系统 |
WO2015149628A1 (zh) * | 2014-04-04 | 2015-10-08 | 北京奇虎科技有限公司 | Dns缓存信息处理方法、设备及系统 |
WO2015149629A1 (zh) * | 2014-04-04 | 2015-10-08 | 北京奇虎科技有限公司 | Dns行为的处理方法、装置及系统 |
US9967269B2 (en) | 2014-04-04 | 2018-05-08 | Beijing Qihoo Technology Company Limited | Method, device and system for processing DNS behavior |
CN103957284A (zh) * | 2014-04-04 | 2014-07-30 | 上海聚流软件科技有限公司 | Dns行为的处理方法、装置及系统 |
CN105991223A (zh) * | 2015-02-13 | 2016-10-05 | Tcl集团股份有限公司 | 一种tcp网络传输数据中防粘包的方法及系统 |
CN106372008A (zh) * | 2015-07-23 | 2017-02-01 | 福州瑞芯微电子股份有限公司 | 一种数据缓存方法及装置 |
CN106372008B (zh) * | 2015-07-23 | 2019-11-22 | 福州瑞芯微电子股份有限公司 | 一种数据缓存方法及装置 |
CN105912479A (zh) * | 2016-04-07 | 2016-08-31 | 武汉数字派特科技有限公司 | 一种并发数据的缓存方法及结构 |
CN107026713A (zh) * | 2017-03-17 | 2017-08-08 | 广东蜂助手网络技术股份有限公司 | 一种在网络通讯包粘连的情况下提高网络速度的方法 |
CN107026713B (zh) * | 2017-03-17 | 2018-04-10 | 广东蜂助手网络技术股份有限公司 | 一种在网络通讯包粘连的情况下提高网络速度的方法 |
CN108200024A (zh) * | 2017-12-26 | 2018-06-22 | 盛科网络(苏州)有限公司 | 一种以太网报文编辑装置及方法 |
CN109933543A (zh) * | 2019-03-11 | 2019-06-25 | 珠海市杰理科技股份有限公司 | Cache的数据锁定方法、装置和计算机设备 |
CN109933543B (zh) * | 2019-03-11 | 2022-03-18 | 珠海市杰理科技股份有限公司 | Cache的数据锁定方法、装置和计算机设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102325010A (zh) | 一种避免数据粘包的处理装置及方法 | |
GB2442176A (en) | Flow control method in wireless USB communication, and wireless USB device and wireless USB host using the same | |
TW200720937A (en) | Mass storage device with near field communications | |
CN106294234A (zh) | 一种数据传输方法及装置 | |
EP2124155A3 (en) | Information processing apparatus, information processing system, method of processing information, and computer program | |
WO2010020907A3 (en) | Device, system, and method of distributing messages | |
CN103605485B (zh) | 一种变长数据的存储方法与装置 | |
CN101568191B (zh) | 移动终端上主从设备之间的数据通讯方法和移动终端 | |
CN106330788A (zh) | 报文分片传输方法和装置 | |
CN105488108A (zh) | 一种多个视频文件高速并行存储的方法及装置 | |
CN102750245B (zh) | 报文接收方法、报文接收模块、装置及系统 | |
CN104035730B (zh) | 一种文件写入方法、装置及无线存储设备 | |
CN113014510A (zh) | 惯导系统分布式测试中数据缓存方法及装置 | |
TW200614760A (en) | Method and apparatus for compiling a protocol data unit | |
CN203241620U (zh) | 头戴显示器 | |
CN102098800A (zh) | 移动网关的处理装置、系统及进行数据处理的方法 | |
CN201788511U (zh) | 安全性信息交互设备 | |
TW200710649A (en) | Method, apparatus and system for posted write buffer for memory with unidirectional full duplex interface | |
CN101510187B (zh) | 一种在标准数据接口实现智能卡控制指令传输的方法 | |
CN102625105A (zh) | 基于单芯片的多通道视频编解码数据传输方法及装置 | |
CN104618644B (zh) | 一种图像数据写入文件的方法及终端 | |
CN104616407A (zh) | Pos机与远程服务器通信的方法、pos机和移动终端 | |
CN106899386B (zh) | 基于多通道通信接收系统的碎片化帧信号的解调方法 | |
CN105117353A (zh) | 带有通用数据交互模块的fpga及采用该fpga的信息处理系统 | |
CN101119561A (zh) | Gsm移动通信终端与sim卡之间的通信方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120118 |