LibQQt系列之十一《QQt通讯模块介绍和实践》

本文介绍QQt的通讯模块,特别是QQtSocketUdpClient和QQtUdpProtocol,用于UDP通信。QQtUdpProtocol是核心,用于发送和接收报文,用户需实现其子类。QQtMessage是数据报类,用于数据的打包和解包。通讯协议的定制化是关键,示例工程提供参考。
摘要由CSDN通过智能技术生成

这篇文章以UDP通信为例进行介绍。UDP比较简单,在windows上用的挺多。
QQt版本v2.1.7.0

QQt通讯模组

QQt通讯模组分为三个部分,通讯接口,通讯协议,通讯报文。
大多数的工作都集中在通讯协议部分,通讯报文是通讯的数据包。

QQtSocketUdpClient

它负责在硬件上通信。客户端服务器都用这个类,服务器bind本地端口一下,其他相同使用方法。太简单了。
需要安装QQtUdpProtocol进行使用。

QQtUdpProtocol

它是重点,用它可以直接发送报文,接收报文。
用户主要实现的就是这个类的子类。
在此以一个检测系统的系统协议进行讲解。

通信有多个Client

在继承下来的类当中,这样处理,和多个客户端通信的时候的客户端连接。
重点在于这个Protocol,只有一个。

CedianUdpProtocol *cedianUdpServer(QObject *parent)
{
    static CedianUdpServer* s0[9] = {
  NULL};
    static CedianUdpProtocol* p0 = NULL;
    if(!s0[0] && !p0)
    {
        p0 = new CedianUdpProtocol(parent);
        for(int i =0; i < 9; i++)
        {
            int port = cedianUdpPort(i+1);
            pline() << i+1 << port;

            s0[i] = new CedianUdpServer(parent);
            /*通讯端口:绑定本地端口*/
            s0[i]->bind(port);
            /*通讯端口:给测点协议*/
            s0[i]->installProtocol(p0);
        }
    }
    return p0;
}

收到消息

重载dispatcher函数咯,在父类当中介绍了。

bool CedianUdpProtocol::dispatcher(const QNetworkDatagram & dg)
{
    mDG = dg;
    mAddress = dg.senderAddress();
    mPort = dg.senderPort();
    mLocalPort = dg.destinationPort();
    QByteArray data = dg.data();
    mMsg.parser(data);
    emit msgIncoming();
}

获取收到的消息

你看到发的信号吗?在哪里进行收取。需要什么信息,就把什么信息保存在局部变量里,通过函数公开出来。
那个mMsg是什么?它是通讯模组的第三个重点。数据报。

QQtMessage

这个类真的是老生常谈,到哪里都是它。
它里面就两个函数,
packer,把要发送的打包到QByteArray里。
parser,把收到的解压到局部变量中。程序中总是用这些局部变量。
其实还有一个打印函数,可以打印数据报的报文。


QDebug operator<<(QDebug dbg, const CedianUdpMessage &c)

{

    //    dbg.nospace() << "{" << hex << c.head() << "|" <<

    //                     hex << c.size() << "=" << dec << c.size() << "|" <<

    //                     hex << c.cmd() << "|" <<

    //                     hex << c.uid() << "|" <<

    //                     c.data().data() << "@" << dec << c.data().size() << "|" <<

    //                     hex << c.sum() << "|" <<

    //                     hex <<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值