• Qt 利用UDP进行通信


    一、UDP的特点

    UDP(用户数据报协议)是一种简单轻量级、不可靠、面向数据报,无连接的传输层协议。而TCP/IP协议却是有连接的

    二、UDP适合应用的几种情况

    1、网络数据大多为短消息

    2、拥有大量客户端

    3、对数据安全性无特殊要求

    4、网络负担非常重,但对响应速度要求高。

    三、利用UDP进行网络通信

    因为upd是无连接的,所以两个通信设备之间不需要建立连接,只要知道对方的IP地址和端口号就行了。

    我们首先创建一个项目,这个项目需要用到ui界面,所以我们还是使用Qtdesigner,并且还要给它布好局。

    首先我们需要绑定端口号,如果在同一台电脑上测试IP地址可以不需要绑定,绑定的时候我们用到bind()函数。

    CSDN QT大纲:Qt开发必备技术栈学习路线和资料

    例:

    udpsocket->bind(8000);

    接收数据

    当接收到数据的时候,socket会自动触发readyRead这个信号,所以需要写一个参函数来处理这个信号,也就是读取socket接收到的数据。

    接收数据的时候我们需要用到这个一个函数

    readDatagram(char *data, qint64 maxSize, QHostAddress *address = Q_NULLPTR, quint16 *port = Q_NULLPTR)

    这个函数的参数的含义如下

    1、将读取的内容存放在data中

    2、读取的长度

    3、对方的ip地址

    4、对方的端口号

    最后将读取的内容显示在文本编辑框里就可以了。

    发送数据

    发送数据的步骤和读取数据的步骤差不多的,首先需要获取界面中的端口,ip地址和文本编辑框中的内容,然后通过writeDatagram()这个函数来发送。

    writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)

    这个函数的参数含义如下

    1、需要发送的消息

    2、对方的IP地址

    3、对方的端口号

    四、发送和接收的代码

    发送

    1. 1 void Widget::on_pushButtonwrite_clicked()
    2. 2 {
    3. 3 //获取对方的端口号和ip
    4. 4 QString ip = ui->lineEditip->text();
    5. 5 quint16 port = ui->lineEditport->text().toInt();
    6. 6
    7. 7 //获取文本框的内容
    8. 8 QString str = ui->textEdit->toPlainText();
    9. 9
    10. 10 //将信息发送给指定的ip
    11. 11 udpsocket->writeDatagram(str.toUtf8(), (QHostAddress)ip, port);
    12. 12 }

    接收

    1. 1 void Widget::readData()
    2. 2 {
    3. 3 char buf[1024] = {0};
    4. 4 QHostAddress addr; //对方的ip
    5. 5 quint16 port; //对方的端口
    6. 6 qint64 len;
    7. 7 len = udpsocket->readDatagram(buf, sizeof(buf), &addr, &port);
    8. 8 {
    9. 9 if(len > 0)
    10. 10 {
    11. 11 QString str = QString("[%1:%2] %3").arg(addr.toString()).arg(port).arg(buf);
    12. 12 ui->textEdit->setText(str);
    13. 13 }
    14. 14 }
    15. 15 }

    编译运行之后如下图

     我这里因为需要两个窗口进行通信,所以将另一个程序的端口号改成了8888。

    本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 相关阅读:
    第三十四节——组合式API使用路由
    Java开发学习(十六)----AOP切入点表达式及五种通知类型解析
    【附源码】计算机毕业设计SSM实验室预约管理系统
    java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java志愿者活动管理平台zx2tk
    把JS中的map方法玩出花来
    Win10系统修改用户名以及C盘下Users用户名实操手册(实测有效)
    Next.js 13 服务器组件和应用目录完整指南
    BP新增修改通信或独立地址通讯
    RabbitMQ及各种模式
  • 原文地址:https://blog.csdn.net/m0_73443478/article/details/128019792