当前位置:网站首页>Qt | UDP广播通信、简单使用案例
Qt | UDP广播通信、简单使用案例
2022-07-06 13:48:00 【雍正不秃头】
Qt | UDP广播通信、简单使用案例
1、UDP广播介绍
UDP广播地址固定IP地址为:255.255.255.255,
接收方绑定0.0.0.0地址并监听指定端口即可收到广播的群发消息。
2、使用场景
某设备的业务通信是使用TCP协议,当该设备部署到一个新的网络环境当中时,设备的IP地址是未知的,需要知道或修改设备的IP地址才能够进行TCP的通信。
此时就可以在局域网内通过UDP广播的形式使该设备收到广播消息,从而使用设备返回IP地址、返回设备的MAC、修改IP地址等操作。
3、Qt UDP广播示例
服务器(发送广播消息端)示例代码:
我这里设定的端口为10123,不是固定的。但是服务器往哪个端口发送广播消息,客户端就得监听哪个端口。
#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, 10123); // 发送广播消息
}
客户端(接收广播消息端)示例代码:
#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(10123, 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;
}
4、运行效果
一个服务端用于发布广播消息,两个客户端(网络调试助手是客户端):
ends…
边栏推荐
- 十一、服务介绍及端口
- Sparkshuffle process and Mr shuffle process
- MySQL related terms
- PostgreSQL 修改数据库用户的密码
- Unity3D学习笔记6——GPU实例化(1)
- 【MySQL】Online DDL详解
- C语言:#if、#def和#ifndef综合应用
- GPS from entry to abandonment (XIV), ionospheric delay
- Happy sound 2[sing.2]
- 50 commonly used numpy function explanations, parameters and usage examples
猜你喜欢

50个常用的Numpy函数解释,参数和使用示例

Shake Sound poussera l'application indépendante de plantation d'herbe "louable", les octets ne peuvent pas oublier le petit livre rouge?

Method return value considerations
![[Chongqing Guangdong education] Information Literacy of Sichuan Normal University: a new engine for efficiency improvement and lifelong learning reference materials](/img/a5/94bdea3a871db5305ef54e3b304beb.jpg)
[Chongqing Guangdong education] Information Literacy of Sichuan Normal University: a new engine for efficiency improvement and lifelong learning reference materials

Numpy download and installation

GPS從入門到放弃(十三)、接收機自主完好性監測(RAIM)

Write a rotation verification code annotation gadget with aardio

Enhance network security of kubernetes with cilium

Why rdd/dataset is needed in spark

Yuan Xiaolin: safety is not only a standard, but also Volvo's unchanging belief and pursuit
随机推荐
[Digital IC manual tearing code] Verilog automatic beverage machine | topic | principle | design | simulation
Why rdd/dataset is needed in spark
在Pi和Jetson nano上运行深度网络,程序被Killed
[Li Kou brush questions] 32 Longest valid bracket
【sciter Bug篇】多行隐藏
Sequoia China, just raised $9billion
Digital transformation takes the lead to resume production and work, and online and offline full integration rebuilds business logic
JS method to stop foreach
What can one line of code do?
jvm:大对象在老年代的分配
MariaDb数据库管理系统的学习(一)安装示意图
记一次清理挖矿病毒的过程
GPS from entry to abandonment (XIV), ionospheric delay
Univariate cubic equation - relationship between root and coefficient
Explain ESM module and commonjs module in simple terms
经纪xx系统节点VIP案例介绍和深入分析异常
PostgreSQL 安装gis插件 CREATE EXTENSION postgis_topology
Reset Mikrotik Routeros using netinstall
Shell product written examination related
Huawei has launched attacks in many industries at the same time, and its frightening technology has made European and American enterprises tremble