前言
用 Qt 的 UDP 来实现一个广播示例,代码其实非常简单,需要用到 QUdpSocket 类,这里实现两个工程,服务端和客户端,由服务器端发送广播消息到每个客户端接收显示。
正文
先来看看两个示例的运行图片
左边是服务端,负责下发消息内容,有那是客户端,负责显示接收到的广播消息。
来看看代码:
服务端
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
m_pUdpServer = new QUdpSocket();
this->setWindowTitle("Udp server");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
QString content = ui->textEdit->toPlainText();
if(!content.isEmpty()){
m_pUdpServer->writeDatagram(content.toLocal8Bit(),QHostAddress::Broadcast,9999);
}
}
客户端
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowTitle("Udp client");
m_pUdpClient = new QUdpSocket;
m_pUdpClient->bind(9999,QUdpSocket::ShareAddress);
connect(m_pUdpClient,&QUdpSocket::readyRead,this,[=](){
while (m_pUdpClient->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(m_pUdpClient->pendingDatagramSize());
m_pUdpClient->readDatagram(datagram.data(),datagram.size());
ui->textEdit->insertPlainText(datagram);
}
});
}
Widget::~Widget()
{
delete ui;
}
为了测试方便,这里的端口号是随便定义的一个数。代码很简单,这里就不多赘述。
代码下载