当前位置: 首页 > article >正文

Qt使用UDP进行单波通信

Qt使用UDP进行单波通信

我们一般学习完基础的一些编程之后就会开始接触网络编程,我们熟悉的网络编程一般会涉及到两个协议一个时TCP,一个是UDP。TCP一般是point to point,UDP一般有单播和广播两种方式,那么我们今天就来学习一下单播。

单播通信

UI界面设计

就不多介绍怎么设计的了,这个和之前讲的是一样的

编写代码

.pro文件

我们要使用网络编程就要引入模块

QT  += core gui network

widget.h文件

我们要先引入头文件

#include"QUdpSocket"

然后要声名对象

QUdpSocket *udpSocket

还有我们的槽函数

//读信息要用
void readPendingDatagrams();
完整代码:
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include"QUdpSocket"

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void readPendingDatagrams();

    void on_pushButton_3_clicked();

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::Widget *ui;
    QUdpSocket *udpSocket;
};
#endif // WIDGET_H

widget.cpp文件

我们创建了udpSocket对象要定义一下,然后实现以下对应的方法

    udpSocket = new QUdpSocket(this);  // 创建UDP套接字,并设置为当前Widget的子对象

    udpSocket->bind(7755);  // 绑定套接字到端口7755

    // 当UDP套接字有数据可读时,连接信号到槽函数readPendingDatagrams
    connect(udpSocket, SIGNAL(readyRead()),
            this, SLOT(readPendingDatagrams()));
槽函数的设置
void Widget::readPendingDatagrams()
{
    QByteArray tmpByArray;
    tmpByArray.resize(udpSocket->pendingDatagramSize());  // 根据待处理数据报的大小调整缓冲区
    QHostAddress ipaddr;
    quint16 port;
    while (udpSocket->hasPendingDatagrams()) {
        // 读取数据报,并获取发送方的IP地址和端口号
        udpSocket->readDatagram(tmpByArray.data(), udpSocket->pendingDatagramSize(), &ipaddr, &port);
        // 将接收到的信息显示在textBrowser控件中
        ui->textBrowser->append("接收来自" + ipaddr.toString() + ":" + QString::number(port) + tmpByArray);
    }
}

有的朋友就问,为啥要传这些参数,我不知道怎么查看。这个简单:

有问题就看帮助文档!!!这个是最权威的!!!!!!!!!!

或者直接将鼠标放到方法上,就会显示如下内容:

按钮槽函数的绑定
// 当点击发送按钮时,调用此函数
void Widget::on_pushButton_3_clicked()
{
    // 在textBrowser中显示发送的文本
    ui->textBrowser->append("发送:" + ui->lineEdit->text());
    // 向本地地址127.0.0.1的7755端口发送数据
    udpSocket->writeDatagram(ui->lineEdit->text().toUtf8(), QHostAddress("127.0.0.1"), 7755);
}

// 当点击绑定按钮时,调用此函数
void Widget::on_pushButton_clicked()
{
    udpSocket->bind(7755);  // 绑定套接字到端口7755
    ui->pushButton->setEnabled(false);  // 禁用绑定按钮
    ui->pushButton_2->setEnabled(true);  // 启用解绑按钮
}

// 当点击解绑按钮时,调用此函数
void Widget::on_pushButton_2_clicked()
{
    udpSocket->abort();  // 终止UDP套接字的操作
    ui->pushButton->setEnabled(true);  // 启用绑定按钮
    ui->pushButton_2->setEnabled(false);  // 禁用解绑按钮
}


http://www.kler.cn/a/304454.html

相关文章:

  • 游戏引擎学习第七天
  • macOS 设置固定IP
  • 电脑提示xinput1_3.dll丢失怎么办?游戏DLL修复方法详解
  • 【SpringBoot】18 上传文件到数据库(Thymeleaf + MySQL)
  • Python 实现阿里滑块全攻略
  • ‌MySQL 5.7和8.0版本在多个方面存在显著区别,主要包括性能优化、新特性引入以及安全性提升
  • 实习项目|苍穹外卖|day9
  • mmseqs2进行pdb蛋白质序列聚类分析
  • 在云服务器上安装 RabbitMQ:从零到一的最佳实践
  • 机械学习—零基础学习日志(Python做数据分析03)
  • JS函数 匿名函数(ES6箭头函数)弄得懂吗?
  • linux 定时将固态硬盘数据备份至机械硬盘
  • 测试质量体系的风险评估和应对措施有哪些
  • UART 16550的使用
  • Git常用命令备忘
  • 【数据结构和算法实践-树-LeetCode110-平衡二叉树】
  • 【STM32 HAL库】IIC通信与CubeMX配置
  • InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE)
  • S32G EB tresos AutoCore下载和激活方法
  • GSEP 7级T2真题 [202312]纸牌游戏
  • [pytorch] 训练节省显存的技巧
  • Kizuna AI——AI驱动虚拟偶像,AI分析观众的反应和互动,应用娱乐、直播和广告行业
  • Linux(RedHat或CentOS)下如何开启telnet服务
  • 【时时三省】(C语言基础)指针进阶 例题7
  • SQLITE3数据库实现信息的增删改查
  • ensp—路由过滤、路由引入、路由策略