Qt TCP之自定义通信协议

该博客探讨了在已有的Qt TCP socket基础上,如何设计并实现一套自定义的通信协议,包括发送和接收QString、QFile及Struct结构体等不同数据类型的详细过程。
摘要由CSDN通过智能技术生成

在已经实现socket通信的前提下,设计了如下的通信格式:

这里写图片描述

假设cmd定义如下:

#ifndef CMD_H
#define CMD_H

//服务器------->客户端
#define     Connet_Success         0x0F00   //连接成功应答包
#define     Login_answer           0x0F01   //登陆结果(也是QString 的一种)
#define     QString_send           0x0F02   //发送字符串
#define     QFile_send             0x0F03   //发送文件
#define     Struct_send            0x0F03   //发送结构体

//客户端------->服务器
#define     Login                  0x0D00   //客户端登陆

#endif // CMD_H

一些变量说明:

    qint64 totalBytes;      //一个数据包MSG部分的完整大小
    qint64 recvdBytes;      //已经收到的字节数
    qint64 serverCmd;       //接受数据包的类型
    QByteArray inBlock;     //接受缓冲
    QByteArray m_buffer;    //缓存上一次或多次的未处理的数据
    QFile *localFile;
    QSqlDatabase db;
    QMutex mutex;
  • 发送QString字符串
void mySocket::sendMSG(QString msg, qint64 cmd)
{
    if(!isValid()) //确保连接仍然有效
    {
        qDebug()<<"losing connect.......";
        return;
    }
    /********************构造数据包************************/
    qint64 totalBytes = 0;
    QByteArray block; //用于暂存我们要发送的数据
    QDataStream output(&block,QIODevice::WriteOnly);//使用数据流写入数据
    output.setVersion(QDataStream::Qt_5_2);
    totalBytes = msg.toUtf8().si
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值