当前位置:网站首页>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…
边栏推荐
- Broadcast variables and accumulators in spark
- GPS from entry to abandonment (XIV), ionospheric delay
- From campus to Tencent work for a year of those stumbles!
- LeetCode:1189. The maximum number of "balloons" -- simple
- Tiktok will push the independent grass planting app "praiseworthy". Can't bytes forget the little red book?
- Z function (extended KMP)
- What is the RDD operator in spark
- 强化学习-学习笔记5 | AlphaGo
- What is the difference between animators and animators- What is the difference between an Animator and an Animation?
- C语言:#if、#def和#ifndef综合应用
猜你喜欢

GPS从入门到放弃(十三)、接收机自主完好性监测(RAIM)

Basic introduction of figure

Reptile practice (V): climbing watercress top250

Write a rotation verification code annotation gadget with aardio

PostgreSQL modifies the password of the database user

JPEG2000-Matlab源码实现

抖音将推独立种草App“可颂”,字节忘不掉小红书?
![Some problems about the use of char[] array assignment through scanf..](/img/cf/d85a3172c5d29ac00377f9c30dbc4f.png)
Some problems about the use of char[] array assignment through scanf..

GPS from getting started to giving up (XIII), receiver autonomous integrity monitoring (RAIM)

1292_FreeROS中vTaskResume()以及xTaskResumeFromISR()的实现分析
随机推荐
GPS從入門到放弃(十三)、接收機自主完好性監測(RAIM)
uni-app App端半屏连续扫码
[Digital IC manual tearing code] Verilog automatic beverage machine | topic | principle | design | simulation
jvm:大对象在老年代的分配
Reset Mikrotik Routeros using netinstall
What is the difference between animators and animators- What is the difference between an Animator and an Animation?
Kohana 数据库
ViT论文详解
GPS from getting started to giving up (XX), antenna offset
GPS从入门到放弃(十四)、电离层延时
Comparison between multithreaded CAS and synchronized
Basic introduction of figure
Broadcast variables and accumulators in spark
GPS从入门到放弃(十八)、多路径效应
Redistemplate common collection instructions opsforhash (IV)
[daily] win10 system setting computer never sleeps
Digital transformation takes the lead to resume production and work, and online and offline full integration rebuilds business logic
Sql: stored procedures and triggers - Notes
Binary tree node at the longest distance
小满网络模型&http1-http2 &浏览器缓存