tcp粘包处理-消息边界的设定

start: 0X7E
end:   0X7F

转义字符:
    0X7E -> 0X7D 0X5E
    0X7F -> 0X7D 0X5F
    0X7D -> 0X7D 0X5D
    
要传的字符:
    0X7D 0X5D 0X7D 0X7D 0X5E 0X7D 0X5F 0X7E

打包添加头尾:
    0X7E 0X7D 0X5D 0X7D 0X7D 0X5E 0X7D 0X5F 0X7E 0X7F

    0X7D 0X5E 0X7D 0X5D 0X7D 0X7D 0X5E 0X7D 0X5F 0X7E 0X7D 0X5F

要传的数据转义:
    原始:0X7D 0X5D 0X7D 0X7D 0X5E 0X7D 0X5F 0X7E
    转义后:0X7D 0X5D 0X5D 0X7D 0X5D 0X7D 0X5D 0X5E 0X7D 0X5D 0X5F 0X7D 0X5E

最终数据:
   0X7D 0X5E 0X7D 0X5D 0X5D 0X7D 0X5D 0X7D 0X5D 0X5E 0X7D 0X5D 0X5F 0X7D 0X5E 0X7D 0X5F


引入的问题:接收解析时,要传的字符里有0X7E或者0X7F怎么办?
        可以将要传的字符里的0X7E和0X7F再次转义。如果转义成另一个字符,总有可能被冲突。
那么可以将一个字符转义成两个字符。如(0X7D 0X5E) (0X7D 0X5F)


又引入了新的问题:接收解析时,要传的字符里原来也就有(0X7D 0X5E) (0X7D 0X5F)怎么办?把0X7D也转义成两个字符,转义成0X7D (非0X5E,非0X5F),比如 (0X7D 0X5D).
0X7D被转义后,接收方解析时看到0X7D,会接着判断下一个字节。每连续处理两个字节的数据确定一个字节。
    只有三种情况:

             0X7D 0X5E -> 0X7E
             0X7D 0X5F -> 0X7F
             0X7D 0X5D -> 0X7D

参考 RFC 1662规定的转义字符填充方法。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值