IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Qt项目:基于UDP协议的网络广播程序 -> 正文阅读

[网络协议]Qt项目:基于UDP协议的网络广播程序

1、功能描述

功能类似于电台发报机或收音机一样,服务端会定时的向某个客户端(广播地址:端口)发出一段字符串文字,客户端在网络畅通情况下能够正确接收到信息,但不进行反馈。

创建两个Qt对话框项目,一个作为服务端,一个作为客户端。

在这里插入图片描述

2、服务端主要代码

udpserver.h

#ifndef UDPSERVER_H
#define UDPSERVER_H

#include <QDialog>
#include <QUdpSocket>
#include <QTimer>

QT_BEGIN_NAMESPACE
namespace Ui { class Udpserver; }
QT_END_NAMESPACE

class Udpserver : public QDialog
{
    Q_OBJECT

public:
    Udpserver(QWidget *parent = nullptr);
    ~Udpserver();

private slots:
    void on_SEpushButton_clicked();
    void timeout();

private:
    Ui::Udpserver *ui;
    quint16 m_nPort;         //端口号
    bool m_bStarted;     //按钮启动状态
    QUdpSocket *m_udpSocket;
    QTimer *m_timer;
};
#endif // UDPSERVER_H

udpserver.cpp

#include "udpserver.h"
#include "ui_udpserver.h"
#pragma execution_character_set("utf-8")

Udpserver::Udpserver(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Udpserver)
{
    ui->setupUi(this);
    m_nPort = 5555;
    m_bStarted=false;
    m_udpSocket = new QUdpSocket(this);
    m_timer = new QTimer(this);
    connect(m_timer,SIGNAL(timeout()),this,SLOT(timeout()));
}

Udpserver::~Udpserver()
{
    delete ui;
}


void Udpserver::on_SEpushButton_clicked()
{
    if(m_bStarted)
    {
        ui->SEpushButton->setText(tr("开始"));
        m_timer->stop();
        m_bStarted =false;
    }
    else
    {
        ui->SEpushButton->setText(tr("停止"));
        m_timer->start(1000);
        m_bStarted =true;
    }
}

// 触发消息发送数据
void Udpserver::timeout()
{
    QString msg = ui->ContentLineEdit->text();
    if(msg=="")
    {
        return;
    }

    // 从qint64 位转为 int类型
    qint64 qLength = m_udpSocket->writeDatagram(msg.toLatin1(),msg.length(),QHostAddress::Broadcast,m_nPort);
    int length = static_cast<int>(qLength);
    if(length != msg.length())
    {
        return;
    }
}

3、客户端主要代码
udpclient.h

#ifndef UDPCLIENT_H
#define UDPCLIENT_H

#include <QDialog>
#include <QMessageBox>
#include <QUdpSocket>
#include <QHostAddress>

QT_BEGIN_NAMESPACE
namespace Ui { class udpclient; }
QT_END_NAMESPACE

class udpclient : public QDialog
{
    Q_OBJECT

public:
    udpclient(QWidget *parent = nullptr);
    ~udpclient();

private slots:
    void on_pushButton_clicked();
    void dataReceived();

private:
    Ui::udpclient *ui;
    quint16 m_nPort;    //端口号
    QUdpSocket *m_udpSocket;
};
#endif // UDPCLIENT_H

udpclient.cpp

#include "udpclient.h"
#include "ui_udpclient.h"
#pragma execution_character_set("utf-8")

udpclient::udpclient(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::udpclient)
{
    ui->setupUi(this);
    m_nPort = 5555;
    m_udpSocket = new QUdpSocket(this);

    connect(m_udpSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));

    bool bResult = m_udpSocket->bind(m_nPort);
    if(!bResult)
    {
        QMessageBox::information(this,tr("error:"),tr("UDP Socket create error!"));
        return;
    }
}

udpclient::~udpclient()
{
    delete ui;
}


void udpclient::on_pushButton_clicked()
{
    close();
}

void udpclient::dataReceived()
{
    while (m_udpSocket->hasPendingDatagrams())
    {
        QByteArray datagram;

        // 从qint64 位转为 int类型
        qint64 qLength = m_udpSocket->pendingDatagramSize();
        int length = static_cast<int>(qLength);
        datagram.resize(length);
        m_udpSocket->readDatagram(datagram.data(),datagram.size());

        QString msg = datagram.data() + tr("\n");
        ui->textEdit->insertPlainText(msg);
    }
}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 12:17:20  更:2021-07-17 12:18:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 0:07:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码