概述
使用两个项目
- 1 sender 用来广播"hello world";
- 2 receiver 用来接收广播信息
sender
- 1 创建Qdialog类
- 2 在sender.pro 中添加 QT +=network 一行代码
- 3 在sender.h 中声明类
- class QUdpSocket;
- 在声明一个私有对象
- QUdpSocket *sender;
- 4 在ui界面拖入一个按钮 用来触发广播信息
其槽函数如下
void Sender::on_pushButton_clicked()
{
QByteArray datagram = "hello world";
sender->writeDatagram(datagram.data(),datagram.size(),
QHostAddress::Broadcast,45454);
}
/*
首先,定义了一个QByteArray类型的变量datagram,其中存储了字符串"hello world"的字节流。
然后,调用了sender对象的writeDatagram函数,该函数用于发送UDP数据报。具体参数含义如下:
datagram.data():获取datagram的数据指针,用于发送数据。
datagram.size():获取datagram的数据大小,用于指定发送数据的长度。
QHostAddress::Broadcast:指定目标主机地址为广播地址,表示将数据发送给局域网内的所有主机。
45454:指定目标主机端口号,表示将数据发送到该端口号对应的进程。
总体来说,这段代码的作用是向局域网内的所有主机发送一个UDP数据报,数据内容为"hello world"。
*/
在sender.cpp 构造函数中添加
sender= new QUdpSocket(this);
receiver
- 1 创建Qdialog类
- 2 在receiver.pro 中添加 QT +=network 一行代码
- 3 在receiver.h 中声明类
- class QUdpSocket;
- 在声明一个私有对象
- QUdpSocket *sender;
- 添加一个私有槽函数
- private slots:
- void processPendingDatagram();
- 4 在ui界面拖入一个label 用来显示接收广播信息
其槽函数如下
void Receiver::processPendingDatagram(){
while(receiver->hasPendingDatagrams()){
QByteArray datagram;
datagram.resize(receiver->pendingDatagramSize());
receiver->readDatagram(datagram.data(),datagram.size());
ui->label->setText(datagram);
}
}
- 5绑定
receiver->bind(45454,QUdpSocket::ShareAddress);
connect(receiver,&QUdpSocket::readyRead,
this,&Receiver::processPendingDatagram);
/*
这段代码是一个初始化和连接信号和槽的操作。
首先,调用了receiver对象的bind函数,该函数用于将接收端口绑定到45454端口上,并且设置了QUdpSocket::ShareAddress选项,表示该端口可以被多个进程共享。
然后,使用connect函数将receiver对象的readyRead信号与当前对象(Receiver类的实例)的processPendingDatagram槽函数连接起来。readyRead信号表示接收到新的数据报,而processPendingDatagram槽函数用于处理接收到的数据报。
总体来说,这段代码的作用是初始化一个UDP接收器,并将其绑定到指定的端口号上。同时,将接收到新数据报的信号与处理数据报的槽函数连接起来,以便在接收到新数据报时能够及时处理。
*/
//sender.cpp 发送端
#include "sender.h"
#include "ui_sender.h"
#include <QtNetwork>
Sender::Sender(QWidget *parent) :
QDialog(parent),
ui(new Ui::Sender)
{
ui->setupUi(this);
sender= new QUdpSocket(this);
}
Sender::~Sender()
{
delete ui;
}
void Sender::on_pushButton_clicked()
{
QByteArray datagram = "hello world";
sender->writeDatagram(datagram.data(),datagram.size(),
QHostAddress::Broadcast,45454);
}
演示