QT udp通信程序示例

前几天做项目,需要设备之间进行通信。刚开始选用的是TCP进行通信,结果发现tcp如果用自己封装的类的话,粘包问题是很难解决的(可以选用第三方封装好的库)。最后选用udp进行通信。学过的因该都知道,udp是一种部不可靠的数据报服务,在测试中发现,如果在网络状态可靠(自己搭建的局域网)的情况下,udp通信是没有任何问题的,几乎不会出现丢包的情况。

以下是qt udp通信程序的示例,包括两个文件,udpcomm.h和udpcomm.cpp,需要udp通信的话,直接加入两个文件即可。

udpcomm.h

#ifndef UDPCOMM_H
#define UDPCOMM_H

#include<QUdpSocket>
#include<QIODevice>
#include <QObject>
#include"address.h"
class udpComm:public QObject
{
    Q_OBJECT
public:
     explicit udpComm(QObject *parent = nullptr);

    void sendData(QByteArray msg,QHostAddress address,quint16 port);

public slots:
    void recive();
private:
    QUdpSocket *socket;

signals:
    void newMessage(QByteArray data);
};

#endif // UDPCOMM_H

udpcomm.cpp

#include "udpcomm.h"
//构造函数中进行己方端口的绑定
udpComm::udpComm(QObject *parent) : QObject(parent)
{
    socket = new QUdpSocket();
    if(!socket->bind(QHostAddress(SUIDONGADD),8888))
        qDebug()<<"bind error!";
    connect(socket,&QUdpSocket::readyRead,this,&udpComm::recive);

}
//信息,接收方的地址和端口号
void udpComm::sendData(QByteArray msg, QHostAddress address, quint16 port)
{

    socket->writeDatagram(msg,address,8888);
}



void udpComm::recive()
{

    while(socket->hasPendingDatagrams())
    {
        QByteArray ba;
        ba.resize(socket->pendingDatagramSize());
        socket->readDatagram(ba.data(),ba.size());
        emit newMessage(ba);

    }
}

在上述代码中,如果要监听udp通信发送消息,只需要建立建立槽函数,然后和newMessage信号之间建立关联即可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值