QT网络编程之实现UDP广播发送和接收

一.UDP广播介绍

UDP广播地址固定IP地址为:XXX.XXX.XXX.255。

如果向全网段发送广播消息,那么广播地址为:255.255.255.255;

如果向单个网段发送广播消息,例如你的IP是192.168.31.104,那么广播地址为192.168.31.255。

广播消息接收方需要绑定0.0.0.0地址并监听指定端口即可收到广播的群发消息。

二.使用场景

某设备的业务通信是使用TCP协议,当该设备部署到一个新的网络环境当中时,设备的IP地址是未知的,需要知道或修改设备的IP地址才能够进行TCP的通信。

此时就可以在局域网内通过UDP广播的形式使该设备收到广播消息,从而使用设备返回IP地址、返回设备的MAC、修改IP地址等操作。

常见的比如IP摄像头。

三.Qt UDP广播代码实现

(1)发送广播消息端示例代码:

我这里设定的端口为5100,不是固定的。但是服务器往哪个端口发送广播消息,客户端就得监听哪个端口。

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    socket = new QUdpSocket(this);

    connect(socket, &QUdpSocket::readyRead, this, [=](){

        while(socket->hasPendingDatagrams())

        {

            QByteArray data;

            data.resize(socket->pendingDatagramSize());

            QHostAddress host;

            quint16 port;

            socket->readDatagram(data.data(), data.size(), &host, &port);  // 将客户端发来的数据在发送回去

        }

    });

}

MainWindow::~MainWindow()

{

    delete ui;

}

void MainWindow::on_pushButton_clicked()

{

    socket->writeDatagram("this is broadcast message !", QHostAddress::Broadcast, 5100);  // 发送广播消息

}

(2)接收广播消息端示例代码:

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    socket = new QUdpSocket(this);

    if(!socket->bind(QHostAddress::Any, 5100, QUdpSocket::ShareAddress))

    {

        ui->textBrowser->append("bind failed !");

    }

    connect(socket, &QUdpSocket::readyRead, this, [=](){

        while(socket->hasPendingDatagrams())

        {

            QByteArray data;

            data.resize(socket->pendingDatagramSize());

            QHostAddress host;

            quint16 port;

            socket->readDatagram(data.data(), data.size(), &host, &port);

            QString text = QString("[%1:%2]:%3").arg(host.toString()).arg(port).arg(QString(data));

            ui->textBrowser->append(text);

        }

    });

}

MainWindow::~MainWindow()

{

    delete ui;

}

参考文章:https://blog.csdn.net/qq153471503/article/details/125622356

相关推荐

  1. QT网络编程实现UDP广播发送接收

    2024-03-22 07:42:06       20 阅读
  2. QT TCPUDP网络编程

    2024-03-22 07:42:06       19 阅读
  3. Qt中对Udp数据打包发送接收(续)

    2024-03-22 07:42:06       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-22 07:42:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-22 07:42:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-22 07:42:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-22 07:42:06       20 阅读

热门阅读

  1. c++ 构造函数详细介绍

    2024-03-22 07:42:06       18 阅读
  2. 377. 组合总和 Ⅳ

    2024-03-22 07:42:06       18 阅读
  3. 常用的Node.js命令集锦

    2024-03-22 07:42:06       16 阅读
  4. VSCode使用MSVC编译器

    2024-03-22 07:42:06       17 阅读
  5. 导入excel复杂校验加异常信息返回

    2024-03-22 07:42:06       17 阅读
  6. 并网型风光储微电网日前优化调度(MATLAB实现)

    2024-03-22 07:42:06       16 阅读
  7. 物联网如何推动工业自动化的发展和变革

    2024-03-22 07:42:06       21 阅读
  8. 关于Windows 10 LTSC 2019无法安装Edge的解决方案

    2024-03-22 07:42:06       33 阅读