|
通信協(xié)議中的轉(zhuǎn)義符 作用:在通信協(xié)議中用在協(xié)議中使得通信的內(nèi)容更加安全可靠。 舉例說明:假設(shè)現(xiàn)在需要定制一個(gè)通信協(xié)議,需要的最基本的就是一個(gè)幀頭和幀尾的標(biāo)志,因?yàn)橥ㄐ诺慕邮辗讲胖朗裁磿r(shí)候是通信的開始和結(jié)束。那么假設(shè)幀頭(通信的開始)為0x02(也可以是其他),幀尾為0x03(也可以是其他),粗略的一看是沒有問題的,但是試想如果在幀頭和幀尾的中間數(shù)據(jù)出現(xiàn)0x02或者0x03的時(shí)候整個(gè)通信過程將會(huì)被破壞掉,因?yàn)楸緛硪粠瑪?shù)據(jù)還沒有傳輸完成,接收方誤以為接收到幀頭或者幀尾就會(huì)重新開始接收數(shù)據(jù)(導(dǎo)致前面已經(jīng)接收的數(shù)據(jù)丟失)或者結(jié)束接收數(shù)據(jù)(導(dǎo)致后面的數(shù)據(jù)無法接收)。理論上來講幀頭和幀尾無論定義為什么字符都會(huì)可能出在通信數(shù)據(jù)中,因?yàn)槲覀儾粦?yīng)該對(duì)用戶傳輸?shù)耐ㄐ艛?shù)據(jù)做出任何的假設(shè)。那么如何解決這個(gè)問題呢?轉(zhuǎn)義字符就是用來解決這個(gè)問題的,先看下面的這張圖片: 這張圖片中再加入了一個(gè)字符即0x1B,這個(gè)字符被定義為轉(zhuǎn)義字符(也可以設(shè)置為別的),加入這個(gè)字符后的傳輸過程變?yōu)椋?x02+用戶數(shù)據(jù)+0x03,但是在用戶數(shù)據(jù)中如果出現(xiàn)0x02即被替換為0x1B+0xE7,如果出現(xiàn)0x03即被替換為0x1B+0xE8,這樣用戶數(shù)據(jù)中就絕不會(huì)再出現(xiàn)0x02和0x03。但是萬一用戶要傳輸?shù)臄?shù)據(jù)就是0x1B+0xE7呢?這也沒有關(guān)系,因?yàn)槿绻脩粢獋鬏數(shù)?x1B也會(huì)被轉(zhuǎn)義為0x1B+0x00,所以假設(shè)用戶真的需要傳輸0x1B+0xE7的話也被0x1B+0x00+0xE7所替代,也不會(huì)造成干擾。這樣做的結(jié)果是在接收端如果接收到轉(zhuǎn)義字符,就必須要判斷下一個(gè)字符是否為特定的三個(gè)值,如果是特定的三個(gè)值就需要做特殊處理,這就是轉(zhuǎn)義字符解決通信中防止通信錯(cuò)誤的原理。 |
|
|