通信协议中的转义符

作用:在通信协议中用在协议中使得通信的内容更加安全可靠。

举例说明:假设现在需要定制一个通信协议,需要的最基本的就是一个帧头和帧尾的标志,因为通信的接收方才知道什么时候是通信的开始和结束。那么假设帧头(通信的开始)为0x02(也可以是其他),帧尾为0x03(也可以是其他),粗略的一看是没有问题的,但是试想如果在帧头和帧尾的中间数据出现0x02或者0x03的时候整个通信过程将会被破坏掉,因为本来一帧数据还没有传输完成,接收方误以为接收到帧头或者帧尾就会重新开始接收数据(导致前面已经接收的数据丢失)或者结束接收数据(导致后面的数据无法接收)。理论上来讲帧头和帧尾无论定义为什么字符都会可能出在通信数据中,因为我们不应该对用户传输的通信数据做出任何的假设。那么如何解决这个问题呢?转义字符就是用来解决这个问题的,先看下面的这张图片:

这张图片中再加入了一个字符即0x1B,这个字符被定义为转义字符(也可以设置为别的),加入这个字符后的传输过程变为,0x02+用户数据+0x03,但是在用户数据中如果出现0x02即被替换为0x1B+0xE7,如果出现0x03即被替换为0x1B+0xE8,这样用户数据中就绝不会再出现0x02和0x03。但是万一用户要传输的数据就是0x1B+0xE7呢?这也没有关系,因为如果用户要传输的0x1B也会被转义为0x1B+0x00,所以假设用户真的需要传输0x1B+0xE7的话也被0x1B+0x00+0xE7所替代,也不会造成干扰。这样做的结果是在接收端如果接收到转义字符,就必须要判断下一个字符是否为特定的三个值,如果是特定的三个值就需要做特殊处理,这就是转义字符解决通信中防止通信错误的原理。

通信协议中的转义符

时间: 2024-07-30 12:10:05

通信协议中的转义符的相关文章

oracle中的转义符 - 在oracle中插入单引号与'&'

1.单引号 那么如果字段的内容中包含了单引号要怎么插入呢?例如:It's fine.方法同样有三·方法一:使用转义字符   SQL > Select 'test' || '''' from dual;   注意:这里的''''四个单引号是什么意思呢?首先第一个和最后一个都是Oracle中的字符串连接符,这个没有异议.那么第二个'和第三'又表示什么意思呢?第二个'是一个转义字符           第三个'才是我们真正的内容·方法二:同样是使用转义字符,只不过方式不同而已   SQL > Sel

11.C#中的转义符和@符号的作用

转义符 转义符是指一个'\'+一个特殊的字符,组成的一个具有特殊意义的字符. \n:  表示换行. namespace _11.转义符 { class Program { static void Main(string[] args) { Console.WriteLine("窗前明月光,\n疑是地上霜.\n举头望明月,\n低头思故乡."); Console.ReadKey(); } } } 注意在windows操作系统下想实现换行,我们必须书写成\r\n. Mac操作系统下是支持\r

SQL语句like子句中的转义符 [转载]

如果想在SQL LIKE里查询有下划线'_'或是'%'等值的记录,直接写成like 'XXX_XX',则会把'_'当成是like的通配符.SQL里提供了 escape子句来处理这种情况,escape可以指定like中使用的转义符是什么,而在转义符后的字符将被当成原始字符,这和C里的'\'很像,但是escape要求自定义一个转义符,而不是指定了'\’字符.如: select * from user_all_tables where table_name like 'YW__%' escape '_

3Java中的转义符

转移字符对应的英文是escape character  (escape还有转义的意思) 字母前面加上捺斜线"\"来表示常见的那些不能显示的ASCII字符.称为转义字符.如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了. 所有的转义字符和所对应的意义: 转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) ,将当前位置移到前一列 008 \f 换页(FF),将当前位置移到下页开头 012 \n 换行(LF) ,

java转义符和正则表达式转义符

举例来说,连续相同的3位数字的正则表达式的标准语法是: ([\d])\1{2} 但是如果在java代码中这么写,就会出现语法错误,如下: String regEx = "([\d])\1{2}"; 考虑到\符号在java字符串的语法中属于转义符,所以,需要的java的语法是: String regEx = "([\\d])\\1{2}"; 为了加深印象,再来看下一个例子:前面连续相同的3位数字,后面连续相同的三位字符的正则表达式的标准语法是: (\d)\1{2}(.

关于 java中的换行符

java中实现换行有以下3种方法: 1.使用java中的转义符"\r\n": String str="aaa"; str+="\r\n"; 这样在str后面就有换行了. 注意:\r,\n的顺序是不能够对换的,否则不能实现换行的效果. 2.BufferedWriter的newline()方法: FileOutputStream fos=new FileOutputStream("c;\\11.txt"); BufferedWri

mysql转义符

mysql字符串中的转义符是\ like环境中默认的转义符也是\ 这样执行like时,\会发生两次转义 ,like第二次转义只对%_\起作用. like '\\\\' 匹配\ like '\\u' 匹配u 所以为了容易区分,最好是在like环境定义其他字符为转义符. 比如like '\'\\update|%' escape '|' 匹配'\update%,|只对%_|起作用.

js技巧--转义符"\"的妙用

js技巧--转义符"\"的妙用 // blueDestiny, never-online // blueDestiny [at] 126.com 通常,我们在动态给定一个container的innerHTML时,通常是样做的: <div id="divc" /> <SCRIPT LANGUAGE="JavaScript"> var div = document.getElementById("divc"

正则表达式中的转义问题

正则表达式是javascript学习中非常重要的一部分,它的主要作用是验证表单. 说到正则表达式,我们首先想到的是它的创建方式,正则表达式创建的方式有两种:字面量形式和RegExp构造函数. 首先说字面量形式: 创建方法:var expression= / pattern / flags ; pattern(模式)部分可以是任何简单或复杂的正则表达式,可以包含字符类.限定符.分组.向前查找以及反向引用. flags(标志)部分表明正则表达式的行为.其中g表示全局模式,i表示不区分大小写模式,m表