当前位置:网站首页>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…
边栏推荐
- 新入职一家公司需要去实践和注意的内容
- 十一、服务介绍及端口
- What is the difference between animators and animators- What is the difference between an Animator and an Animation?
- hdu 4912 Paths on the tree(lca+馋)
- npm run dev启动项目报错 document is not defined
- Make menuconfig has a recipe for target 'menuconfig' failed error
- Numpy download and installation
- Enhance network security of kubernetes with cilium
- GPS du début à l'abandon (XIII), surveillance autonome de l'intégrité du récepteur (raim)
- Uni app app half screen continuous code scanning
猜你喜欢
关于char[]数组通过scanf赋值使用上的一些问题。。
20 large visual screens that are highly praised by the boss, with source code templates!
50 commonly used numpy function explanations, parameters and usage examples
GPS从入门到放弃(十五)、DCB差分码偏差
[daily] win10 system setting computer never sleeps
美国科技行业结束黄金时代,芯片求售、裁员3万等哀声不断
关于程序员的职业操守,从《匠艺整洁之道》谈起
[Yu Yue education] higher mathematics of Nanchang University (2) reference materials
guava:Collections.unmodifiableXXX创建的collection并不immutable
GPS从入门到放弃(十七) 、对流层延时
随机推荐
Earned value management EVM detailed explanation and application, example explanation
C language char, wchar_ t, char16_ t, char32_ Relationship between T and character set
PostgreSQL 修改数据库用户的密码
Reptile practice (V): climbing watercress top250
Binary tree node at the longest distance
20 large visual screens that are highly praised by the boss, with source code templates!
MySQL related terms
OpenCV300 CMake生成project在项目过程中的问题
Shell product written examination related
Intelligent online customer service system source code Gofly development log - 2 Develop command line applications
GPS从入门到放弃(十二)、 多普勒定速
Run the deep network on PI and Jetson nano, and the program is killed
From campus to Tencent work for a year of those stumbles!
1292_FreeROS中vTaskResume()以及xTaskResumeFromISR()的实现分析
新入职一家公司需要去实践和注意的内容
NPM run dev start project error document is not defined
[Chongqing Guangdong education] Information Literacy of Sichuan Normal University: a new engine for efficiency improvement and lifelong learning reference materials
MongoDB(三)——CRUD
Hill | insert sort
Guava: three ways to create immutablexxx objects