网络、串口之应用层通讯协议编订

一种二进制通信协议

消息长度(BYTES)结构描述
Header4SyncBytes格式:0x09, 0x6f, 0x01, 0x01,表示不同设备之间的交互
Header4FullMessageLength数据总长度,包括SyncBytes和FullMessageLength
Header4MessageSeq消息序列 seq ,递增
Header4MeaageType消息类型(消息号),如登录消息或发送消息消息
Header4StringBody消息字符流长度,可能是json流、xml流以及普通字符流
Header12Reserved保留字段,总共12字节
BodyStringBodyLengthStringBody消息体( json或xml或普通字符串数据),该字段长度可能为0
BodyFullMessageLength - 32 - StringBodyLengthBinaryData二进制数据,该字段长度可能为0

注: 消息头总共32个字节(包括SyncBytes和FullMessageLength),消息体长度StringBodyLength是已知的,而二进制数据长度计算得到(FullMessageLength - 32 - StringBodyLength)。

协议代码编写

#include <string>
#include <vector>

#define 	kTotalHeadLen             32
struct TcpMessage_t
{
    int syncBytes = 0;
    int fullMsgLen = 0;
    int msgSeq = 0;
    int msgType = 0;
    int bodyLen = 0;
    char reserved[12] = {0};	// reserved 12-bytes
    std::string body;
    std::string binaryData;	// maybe empty
};



void sendMsg(TcpMessage_t &data)
{
	TcpMessage_t msg;
	int _currentSeq;
	
    msg.syncBytes = 1;
    _currentSeq += 1;
    msg.msgSeq = _currentSeq;
    msg.msgType =1;
    msg.bodyLen = data.body.length();
    msg.fullMsgLen = kTotalHeadLen + msg.bodyLen + 				data.binaryData.length();

   //send msg

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路过的小熊~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值