在接收数据的时候如何确定数据是完整的, 所以要定义解析协议.
一开始想到如下方法:
长度 + 数据
但是如果长度出错的话将会造成解析错误. 所以想加上校验字段
头标记 + 长度 + 数据 + 尾标记
但是如果数据中出现了头标记或者尾标记可能也会造成解析错误.
请问要如何定义一个强效的应用层协议呢?
在接收数据的时候如何确定数据是完整的, 所以要定义解析协议.
一开始想到如下方法:
长度 + 数据
但是如果长度出错的话将会造成解析错误. 所以想加上校验字段
头标记 + 长度 + 数据 + 尾标记
但是如果数据中出现了头标记或者尾标记可能也会造成解析错误.
请问要如何定义一个强效的应用层协议呢?
比较常见的做法是:
开始标志位 + 长度 + 数据 + 校验位(如CRC32等)。
设计良好的协议你可以看TS中的PAT、PMT等数据包格式。无论多么精良的协议,免不了在网络不好或不通的时候丢包,所以最重要还是应用层对数据的校验和出错后的处理。