还有这种现象

来源:百度知道 编辑:UC知道 时间:2024/05/23 15:17:25
还有这种现象,发送的数据包比接受到的数据包要少?这是怎么回事?

在通信领域,无论是计算机监控协议还是TCP/IP协议簇,为了保证数据传输的可靠性,都需要引入校验码。由于字符串在高级语言中处理更加方便,本文所涉及的函数,输入均为16进制字符串,输出的校验码结果也为16进制字符串。在数据发送时,则将16进制字符串转换为实际的字节流。利用这些函数可以轻松地进行数据包校验码的生成以及数据包的校验。这些函数是作者从事计算机监控工作近10年的总结,经过反复检验,可以直接应用于工程项目。
关键词 Add,Xor,CRC,CheckSum,校验
一、 引言
表1所示是一个职工工资简表,基本工资、津贴、房补之和为应发工资,应发减去公积金与医疗保险为实发工资,合计分别计算各列之和。为什么要引入合计,是为了验算和使用的方便,如实发工资总计为1782元,一目了然。
当发送16进制字节41 00 42时,为了保证数据传输的可靠性,同样需要引入验算,即校验功能。如果选择累加和(Add)校验,则发送字节时,还需要在所发送的字节流的末尾发送字节的累加和,0x41 + 0 +0x42 = 0x83,因而,采用累加和校验,实际发送的字节流为41 00 42 83。对方收到数据后,将校验码0x83放在一边,重新计算字节41 00 42的校验码,如果与收到的校验码一致,则认为收到的数据正确,就进行处理,否则,丢弃收到的数据。除了累加和校验码外,还有异或(Xor)校验码、循环冗余校验码(CRC)、TCP/IP协议中的累加求补校验码(CheckSum)。下面依次详细介绍各种校验码的生成和检验函数。
二、 累加和(Add)校验
累加和校验码的初始值为0,对待发送的数据以字节为单位,与初始值相加模256,最后所得结果即为累加和校验码。addStrValue函数实现该功能,该函数只接受16进制字符串,并且,所产生的Add校验码也是16进制字符串。其基本原理是,首先,将16进制字符串转换为字节数据,然后,累加模256,最后,通过ByteToTwoHexChars函数转换为16进制字符串形式的校验码。