CN112637141A - Slip协议解析中保证数据完整性的方法 - Google Patents
Slip协议解析中保证数据完整性的方法 Download PDFInfo
- Publication number
- CN112637141A CN112637141A CN202011438329.8A CN202011438329A CN112637141A CN 112637141 A CN112637141 A CN 112637141A CN 202011438329 A CN202011438329 A CN 202011438329A CN 112637141 A CN112637141 A CN 112637141A
- Authority
- CN
- China
- Prior art keywords
- data
- last
- buffer
- stored
- frame
- 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.)
- Withdrawn
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/02—Protocol performance
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/03—Protocol definition or specification
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/06—Notations for structuring of protocol data, e.g. abstract syntax notation one [ASN.1]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/12—Protocol engines
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种SLIP协议解析中保证数据完整性的方法,步骤为:统计本次接收到的数据缓存区中0xc0的个数;保存数据缓存区中的最后一个0xc0的数组序号;判断接收缓存区中是否仅有一个数据,且这个数据是0xc0;如果不满足步骤3判断条件,就判断最后一个0xc0是否是数据缓存区中最后一个数据。本发明会将数据缓冲区中的不完整数据帧保存起来,并记录保存的数据个数;在下一次读取缓冲区数据时,把保存的数据拼接在缓冲区数据之前,接着再做后续的协议解析,就可以保证不会抛弃掉不完整的数据帧而导致待解析的数据不完整。
Description
技术领域
本发明属于SLIP协议解析技术领域,涉及一种SLIP协议解析中保证数据完整性的方法。
背景技术
SLIP协议简单描述如下:以0xc0为帧头,0xc0为帧尾,帧头帧尾间若出现0xc0,则以连续两个字符0xdb和0xdc取代;如果帧头帧尾间出现0xdb,那么就用连续两个字符0xdb和0xdd替代;接收方也按照这个规则还原接收到的数据。
在数据接收过程中,接收到的数据会存放在接收缓存区中,通过检测0xc0帧头,0xc0帧尾,将数据帧从缓存区中取出。由于基于SLIP协议的数据帧长度不固定,发送方与接收方软件运行周期也不可能严格同步,导致接收缓存中的数据可能存在不完整的数据帧。
发明内容
(一)发明目的
本发明的目的是:为了保证接收到数据不丢帧,设计一种保证数据完整性的方法,可应对缓存区数据各种不完整情况下解析数据帧的完整性。
(二)技术方案
为了解决上述技术问题,本发明提供一种SLIP协议解析中保证数据完整性的方法包括以下步骤:
步骤1:统计本次接收到的数据缓存区中0xc0的个数。遍历缓存区中所有数据,与0xc0比较,若相等,则将0xc0个数计数器加1。用count来表示0xc0的个数,用lastc0Index来表示数据缓存区中最后一个0xc0的数组序号,用revlen来表示接收缓存区中数据个数,用revbuf来表示接收缓存区数据起始地址。
步骤2:保存数据缓存区中的最后一个0xc0的数组序号。遍历缓存区中所有数据,与0xc0比较,若相等,则将计数中间变量counttemp加1,并将counttemp与上一步计算得到的0xc0个数计数器count比较,若不一致则继续运行循环,若一致则记录下此时已经比较过的数据个数i值,此值就是最后一个0xc0的数组序号lastc0Index,跳出循环。
步骤3:判断接收缓存区中是否仅有一个数据,且这个数据是0xc0。若是,则认为不是完整的数据帧,需要将这个0xc0保存起来,并将需要保存的数据个数赋值为1。具体方法是,如果revlen为1,且rebuf地址内的数据就是0xc0,那么就把0xc0存储在savebuf指向的地址中,且把存储数据长度savelen赋值为1。
步骤4:如果不满足第三步判断条件,就判断最后一个0xc0是否就是数据缓存区中最后一个数据,若是,则进入第5步处理。若不是,就说明数据缓存区中存在不完整的数据帧,需要存储不完整的数据帧,并记录需要存储的数据个数。判断最后一个0xc0是否就是数据缓存区中最后一个数据的具体方法是比较lastc0Index和revlen的值。如果lastc0Index和revlen-1的值一致,说明最后一个0xc0就是数据缓存区中最后一个数据;若不一致,说明不是。需要记录的数据长度就是revlen-lastc0Index,需要记录的数据就是revbuf+lastc0Index地址往后长度为revlen-lastc0Index的所有数据,存储在savebuf地址开始revlen-lastc0Index长度的内存中。
步骤5:若满足第四步判断,说明最后一个0xc0就是数据缓冲区的最后一个数据,此时还不能认为缓冲区内不存在不完整的数据帧。还存在一种可能性,就是最后的0xc0是下一帧数据的帧头,此时是需要保存这个0xc0的,并将需要保存的数据个数置为1。判断最后一个0xc0是否需要保存的方法是判断这个0xc0之前的数据是否也是0xc0,如果是,则保存;如果不是,则说明数据帧是完整的,没有需要保存的数据。具体判断方法是将revbuf+lastc0Index-1地址指向的数据与0xc0比较,如果相等,那么就把0xc0存储在savebuf指向的地址中,且把存储数据长度savelen赋值为1。如果不相等,需要存储的数据长度savelen置为0。
(三)有益效果
上述技术方案所提供的SLIP协议解析中保证数据完整性的方法,会将数据缓冲区中的不完整数据帧保存起来,并记录保存的数据个数;在下一次读取缓冲区数据时,把保存的数据拼接在缓冲区数据之前,接着再做后续的协议解析,就可以保证不会抛弃掉不完整的数据帧而导致待解析的数据不完整。
具体实施方式
为使本发明的目的、内容和优点更加清楚,下面结合实施例,对本发明的具体实施方式作进一步详细描述。
本发明SLIP协议解析中保证数据完整性的方法包括以下步骤:
步骤1:统计本次接收到的数据缓存区中0xc0的个数。遍历缓存区中所有数据,与0xc0比较,若相等,则将0xc0个数计数器加1。用count来表示0xc0的个数,用lastc0Index来表示数据缓存区中最后一个0xc0的数组序号,用revlen来表示接收缓存区中数据个数,用revbuf来表示接收缓存区数据起始地址。
步骤2:保存数据缓存区中的最后一个0xc0的数组序号。遍历缓存区中所有数据,与0xc0比较,若相等,则将计数中间变量counttemp加1,并将counttemp与上一步计算得到的0xc0个数计数器count比较,若不一致则继续运行循环,若一致则记录下此时已经比较过的数据个数i值,此值就是最后一个0xc0的数组序号lastc0Index,跳出循环。
步骤3:判断接收缓存区中是否仅有一个数据,且这个数据是0xc0。若是,则认为不是完整的数据帧,需要将这个0xc0保存起来,并将需要保存的数据个数赋值为1。具体方法是,如果revlen为1,且rebuf地址内的数据就是0xc0,那么就把0xc0存储在savebuf指向的地址中,且把存储数据长度savelen赋值为1。
步骤4:如果不满足第三步判断条件,就判断最后一个0xc0是否就是数据缓存区中最后一个数据,若是,则进入第5步处理。若不是,就说明数据缓存区中存在不完整的数据帧,需要存储不完整的数据帧,并记录需要存储的数据个数。判断最后一个0xc0是否就是数据缓存区中最后一个数据的具体方法是比较lastc0Index和revlen的值。如果lastc0Index和revlen-1的值一致,说明最后一个0xc0就是数据缓存区中最后一个数据;若不一致,说明不是。需要记录的数据长度就是revlen-lastc0Index,需要记录的数据就是revbuf+lastc0Index地址往后长度为revlen-lastc0Index的所有数据,存储在savebuf地址开始revlen-lastc0Index长度的内存中。
步骤5:若满足第四步判断,说明最后一个0xc0就是数据缓冲区的最后一个数据,此时还不能认为缓冲区内不存在不完整的数据帧。还存在一种可能性,就是最后的0xc0是下一帧数据的帧头,此时是需要保存这个0xc0的,并将需要保存的数据个数置为1。判断最后一个0xc0是否需要保存的方法是判断这个0xc0之前的数据是否也是0xc0,如果是,则保存;如果不是,则说明数据帧是完整的,没有需要保存的数据。具体判断方法是将revbuf+lastc0Index-1地址指向的数据与0xc0比较,如果相等,那么就把0xc0存储在savebuf指向的地址中,且把存储数据长度savelen赋值为1。如果不相等,需要存储的数据长度savelen置为0。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (9)
1.一种SLIP协议解析中保证数据完整性的方法,其特征在于,包括以下步骤:
步骤1:统计本次接收到的数据缓存区中0xc0的个数;
步骤2:保存数据缓存区中的最后一个0xc0的数组序号;
步骤3:判断接收缓存区中是否仅有一个数据,且这个数据是0xc0;若是,则认为不是完整的数据帧,需要将这个0xc0保存起来,并将需要保存的数据个数赋值为1;
步骤4:如果不满足步骤3判断条件,就判断最后一个0xc0是否是数据缓存区中最后一个数据,若是,则进入步骤5处理;若不是,说明数据缓存区中存在不完整的数据帧,需要存储不完整的数据帧,并记录需要存储的数据个数;
步骤5:若满足第四步判断,说明最后一个0xc0是数据缓冲区的最后一个数据,此时不能认为缓冲区内不存在不完整的数据帧,还存在最后的0xc0是下一帧数据的帧头的可能性,此时需要保存下一帧数据的帧头0xc0,并将需要保存的数据个数置为1。
2.如权利要求1所述的SLIP协议解析中保证数据完整性的方法,其特征在于,步骤1中:遍历缓存区中所有数据,与0xc0比较,若相等,则将0xc0个数计数器加1,由此统计0xc0的个数。
3.如权利要求2所述的SLIP协议解析中保证数据完整性的方法,其特征在于,步骤1中:用count来表示0xc0的个数,用lastc0Index来表示数据缓存区中最后一个0xc0的数组序号,用revlen来表示接收缓存区中数据个数,用revbuf来表示接收缓存区数据起始地址。
4.如权利要求3所述的SLIP协议解析中保证数据完整性的方法,其特征在于,步骤2中:遍历缓存区中所有数据,与0xc0比较,若相等,则将计数中间变量counttemp加1,并将counttemp与上一步计算得到的0xc0个数计数器count比较,若不一致则继续运行循环,若一致则记录下此时已经比较过的数据个数i值,此值就是最后一个0xc0的数组序号lastc0Index,跳出循环。
5.如权利要求4所述的SLIP协议解析中保证数据完整性的方法,其特征在于,步骤3中:如果revlen为1,且rebuf地址内的数据是0xc0,那么把0xc0存储在savebuf指向的地址中,且把存储数据长度savelen赋值为1。
6.如权利要求5所述的SLIP协议解析中保证数据完整性的方法,其特征在于,步骤4中:判断最后一个0xc0是否是数据缓存区中最后一个数据的方法是:比较lastc0Index和revlen的值,如果lastc0Index和revlen-1的值一致,说明最后一个0xc0是数据缓存区中最后一个数据;若不一致,说明不是;需要记录的数据长度是revlen-lastc0Index,需要记录的数据是revbuf+lastc0Index地址往后长度为revlen-lastc0Index的所有数据,存储在savebuf地址开始revlen-lastc0Index长度的内存中。
7.如权利要求6所述的SLIP协议解析中保证数据完整性的方法,其特征在于,步骤5中:判断最后一个0xc0是否需要保存的方法是:判断这个0xc0之前的数据是否也是0xc0,如果是,则保存;如果不是,则说明数据帧是完整的,没有需要保存的数据。
8.如权利要求7所述的SLIP协议解析中保证数据完整性的方法,其特征在于,步骤5中:判断方法是将revbuf+lastc0Index-1地址指向的数据与0xc0比较,如果相等,那么就把0xc0存储在savebuf指向的地址中,且把存储数据长度savelen赋值为1;如果不相等,需要存储的数据长度savelen置为0。
9.如权利要求1-8中任一项所述的SLIP协议解析中保证数据完整性的方法在SLIP协议解析技术领域中的应用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011438329.8A CN112637141A (zh) | 2020-12-07 | 2020-12-07 | Slip协议解析中保证数据完整性的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011438329.8A CN112637141A (zh) | 2020-12-07 | 2020-12-07 | Slip协议解析中保证数据完整性的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112637141A true CN112637141A (zh) | 2021-04-09 |
Family
ID=75310267
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011438329.8A Withdrawn CN112637141A (zh) | 2020-12-07 | 2020-12-07 | Slip协议解析中保证数据完整性的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112637141A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113726755A (zh) * | 2021-08-23 | 2021-11-30 | 天津津航计算技术研究所 | 一种slip协议数据的处理方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030126270A1 (en) * | 2001-12-31 | 2003-07-03 | Globespanvirata Incorporated | System and method for robust parsing of multiple-frane protocol messages |
CN110908949A (zh) * | 2019-09-29 | 2020-03-24 | 中国人民解放军陆军工程大学 | 一种基于slip协议的完整数据帧的接收方法 |
-
2020
- 2020-12-07 CN CN202011438329.8A patent/CN112637141A/zh not_active Withdrawn
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030126270A1 (en) * | 2001-12-31 | 2003-07-03 | Globespanvirata Incorporated | System and method for robust parsing of multiple-frane protocol messages |
CN110908949A (zh) * | 2019-09-29 | 2020-03-24 | 中国人民解放军陆军工程大学 | 一种基于slip协议的完整数据帧的接收方法 |
Non-Patent Citations (1)
Title |
---|
李逸楠等: "一种基于SLIP 协议的串行数据解析方法", 《科技与创新》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113726755A (zh) * | 2021-08-23 | 2021-11-30 | 天津津航计算技术研究所 | 一种slip协议数据的处理方法 |
CN113726755B (zh) * | 2021-08-23 | 2023-06-02 | 天津津航计算技术研究所 | 一种slip协议数据的处理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11805224B2 (en) | Image transmission device and method including an image data receiver and a processor | |
US20110055666A1 (en) | Receiver for error-protected packet-based frame | |
CN112637141A (zh) | Slip协议解析中保证数据完整性的方法 | |
CN106788888A (zh) | 弱网络环境下提高安卓移动终端通信成功率的方法及系统 | |
CN109918545B (zh) | 传感器数据的提取方法及装置 | |
CN109728879B (zh) | 串口突发接入应用层slip协议报文同步纠错方法 | |
CN102629235A (zh) | 一种提高ddr存储器读写速率的方法 | |
US20020124222A1 (en) | Increasing performance with memory compression | |
US20050002332A1 (en) | Method, apparatus and computer program for performing a frame flow control, and method, apparatus and computer program for transmitting a frame | |
CN113242473B (zh) | 一种数据处理方法、系统、数据采集设备及可读存储介质 | |
US20100115387A1 (en) | Data receiving apparatus, data receiving method, and computer-readable recording medium | |
CN113645192B (zh) | Rtp数据包处理方法及装置 | |
CN115811516A (zh) | 多分帧文件并发上报的方法、装置、设备和介质 | |
US8234524B1 (en) | Protocol analysis with event present flags | |
JPS6174442A (ja) | 静止画受信端末のデ−タバッファ方式 | |
WO2020220951A1 (zh) | 一种录像数据存储方法及装置 | |
CN112751873B (zh) | 蓝牙midi数据转换方法、电路及存储介质 | |
CN113726605A (zh) | 一种快速丢弃错误报文的装置及方法 | |
JP2625682B2 (ja) | 音声区間の始端検出装置 | |
CN115292029A (zh) | 一种基于arm的不定字节串口可靠接收方法 | |
CN115801019A (zh) | 并行加速lz77解码方法及其装置、电子设备 | |
CN117978325A (zh) | 信号系统间传递数据的有效数据帧侦测方法、设备及介质 | |
CN117555821A (zh) | 一种嵌入式高可靠性外部数据处理方法 | |
CN118795194A (zh) | 一种基于fpga预处理的数字示波器 | |
CN117560335A (zh) | 一种数据读取方法、装置、电子设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20210409 |