我们需要利用Qt5发送TCP/UDP的协议数据的问题,这里稍微做个记录。
通信协议(这里只是举例)
Version(1 字节) | Mode(4 字节) | Message(4字节) |
首先我们构建数据结构体
#pragma pack(push) //保存对齐状态
#pragma pack(1)//设定为1字节对齐
struct type_header
{
char version;
int mode;
int data;
};
//__attribute__((packed));
#pragma pack(pop)//恢复对齐状态
typedef struct type_header header_packet;
QT5头文件为 #include <QtEndian>
header_packet pkts;
pkts.header.version = 0x01;
pkts.header.mode = qFromBigEndian(0x00010200);
这样就可以通过调用TCP/UDP的接口函数将协议数据发送出去了。
主要是注意两点:
一、协议数据要保持1字节对其,防止发送出去的数据报文与协议规定的不匹配。
二、注意QT5下的网络转本地与本地转网络的函数qFromBigEndian的问题。