QT网络编程: 实现UDP通讯设置

news2024/11/15 8:07:01

目录

一.widget.ui界面设计

二.创建UDP通信

1.pro文件添加network模块。

2.添加对应头文件

3.定义槽函数,即与 UI 中的按钮点击事件相关联的函数

4.定义类的私有成员

5.关闭按钮

6.信息处理

7.绑定端口

8.发送信息

9.效果图

三.代码演示

1.widget.h

2.widget.cpp


一.widget.ui界面设计

拖拽左侧Label控件到页面中,分别显示Label:对方IP;Label:对方端口。

拖拽左侧Push Button控件到页面中,分别为: 发送,关闭,两个按钮。在右侧将其objectName 分别设置为 ;"sendButton" ;  "closeButton" 。

拖拽左侧QLineEdit控件到页面中,在右侧将其objectName 设置为"lineIp"和"lienProt",目的是输入对方IP和对方端口号。

拖拽左侧QTextEdit控件到页面中,在右侧将其objectName 设置为"textEditRead"和"textEditWrite",目的是读取对方发来的信息和输入自己想要发送的信息。
 

二.创建UDP通信

1.pro文件添加network模块。


2.添加对应头文件


#include <QUdpSocket>: C++ 中用于引入 Qt 网络库中的 QUdpSocket 类的预处理指令。QUdpSocket 是 Qt 用于实现用户数据报协议 (UDP) 的类。UDP 是一种无连接的、不可靠的传输层协议,通常用于实时数据传输,如游戏、流媒体和网络广播等场景,因为它提供了低延迟和低开销的通信。

#include <QHostAddress>:QHostAddress 类是 Qt Network 模块中的一个类,用于表示 IP 地址和主机名。它提供了一种方便的方式来处理 IP 地址,支持 IPv4 和 IPv6 地址。

3.定义槽函数,即与 UI 中的按钮点击事件相关联的函数

  • on_closeButton_clicked():当关闭按钮被点击时调用。
  • on_sendButton_clicked():当发送按钮被点击时调用。

4.定义类的私有成员

  • QUdpSocket *socket;:一个 QUdpSocket 对象,用于网络通信。

5.关闭按钮

6.信息处理

7.绑定端口

8.发送信息

9.效果图

三.代码演示

1.widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QUdpSocket>
#include <QWidget>
#include <QHostAddress>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    void dealMsg();

private slots:
    void on_closeButton_clicked();

    void on_sendButton_clicked();



private:
    Ui::Widget *ui;

    QUdpSocket* udpSocket;
};

#endif // WIDGET_H

2.widget.cpp

#include "widget.h"
#include "ui_widget.h"


Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    udpSocket = new QUdpSocket(this);

    udpSocket->bind(QHostAddress::Any,9000);

    connect(udpSocket,&QUdpSocket::readyRead,this,&Widget::dealMsg);

    setWindowTitle("端口: 9000");

}

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

void Widget::on_closeButton_clicked()
{
   close();
}

void Widget::on_sendButton_clicked()
{
    if(nullptr == ui->lineIp || nullptr == ui->lienProt){
        return;
    }

    QString ip = ui->lineIp->text();
    quint16 port = ui->lienProt->text().toInt();

    //读取编辑区内容
    if(nullptr == ui->textEditWrite){
        return;
    }
    QString str=ui->textEditWrite->toPlainText();

    //写入套接字
    udpSocket->writeDatagram(str.toUtf8(),QHostAddress(ip),port);

}

void Widget::dealMsg()
{
   //定义了一个字符数组buf,大小为1024个字符。数组初始化为0,这通常用于确保数组在使用前被正确初始化
   char buf[1024] = {0};

   //QHostAddress 是Qt库中用于表示IP地址的类。quint16 是一个16位无符号整数,通常用于表示端口号。
   QHostAddress ip;
   quint16 port;

   //readDatagram 是一个从UDP套接字读取数据的方法。它接受四个参数:
   //第一个参数buf:用于存储读取到的数据的缓冲区。
   //第二个参数sizeof(buf):指定缓冲区的大小,这里是1024个字符。
   //第三个参数&ip:用于接收读取到的IP地址,通过引用传递以修改变量的值。
   //第四个参数&port:用于接收读取到的端口号,同样通过引用传递。
   //接受信息
   qint64 len = udpSocket->readDatagram(buf,sizeof(buf),&ip,&port);
   if(len>0){
       //显示
       QString str = QString("[%1:%2]%3")
               .arg(ip.toString())
               .arg(port)
               .arg(buf);

       ui->textEditRead->append(str);
   }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2055372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙公共事件和通知

创建一个鸿蒙应用项目&#xff0c;在Index页面中创建一个按钮&#xff0c;点击该按钮&#xff0c;可以创建一个公共事件订阅者&#xff0c;可以订阅自定义公共事件&#xff08;事件名称为&#xff1a;“ncwu.harmonytest.event1”&#xff09;&#xff1b;创建一个Toggle组件&a…

解决 kill -9 PID 无法杀死 python 进程的问题:杀死 defunct 进程

文章目录 1. 一定要用 Ctrl C 结束程序2. 如何杀死后台僵尸 (defunct) 进程2.1 查看 defunct 进程2.2 杀死 defunct 进程的父进程 1. 一定要用 Ctrl C 结束程序 CtrlZ 和 CtrlC 都可以中断程序&#xff0c;但他们却有很大的差异&#xff0c;主要体现在&#xff1a; CtrlC: …

FSR超分笔记

最近因为工作原因&#xff0c;接触到了超分以及AMD家出的FSR算法&#xff0c;特意记录了解一下~ 前言 超分辨率是通过硬件或软件方法提高原有图像分辨率的方法&#xff0c;通过一幅或者多幅低分辨率的图像来得到一幅高分辨率的图像。 FSR是AMD提出的一种超分辨率方法&#x…

力扣面试经典算法150题:轮转数组

轮转数组 今天的题目是力扣面试经典150题中的数组的基础难度题&#xff1a;轮转数组。 题目链接&#xff1a;https://leetcode.cn/problems/rotate-array/description/?envTypestudy-plan-v2&envIdtop-interview-150 问题描述 给定一个整型数组 nums 和一个整数 k&…

微服务实战系列之玩转Docker(十一)

前言 在云原生的世界&#xff0c;经过十多年的进化&#xff0c;Docker已经形成了较完备的“后勤”保障服务和建立了荣辱与共的“密友圈”。用一句话可以概括&#xff1a;“Docker走遍天下&#xff0c;Swarm功不可没”。 因此&#xff0c;我们需尽可能做到对Swarm有充分的认识…

Java面试篇(多线程相关专题)

文章目录 0. 前言1. 线程基础1.1 线程和进程1.1.1 进程1.1.2 线程1.1.3 进程和线程的区别 1.2 并行和并发1.2.1 单核 CPU 的情况1.2.2 多核 CPU 的情况1.2.3 并行和并发的区别 1.3 线程创建的方式1.3.1 继承 Thread 类&#xff0c;重写 run 方法1.3.2 实现 Runnable 接口&#…

工业一体机在工业自动化控制领域的关键性作用

随着工业自动化技术的不断发展和应用范围的不断扩大&#xff0c;工业一体机作为一种集成了多种功能的自动化控制设备&#xff0c;在工业自动化控制领域扮演着越来越重要的角色。 一、 集成性强&#xff0c;简化系统架构 传统工业自动化控制系统通常由多个独立的设备组成&…

php7.1编译安装

1.安装必要的工具&#xff1a; 首先确保您已经安装了 Xcode 和 Command Line Tools&#xff1a;xcode-select --install2.下载 PHP 7.1 源代码&#xff1a; 访问 PHP 官方网站下载 PHP 7.1 的源代码&#xff1a; wget https://www.php.net/distributions/php-7.1.33.tar.gz t…

基于Java企业项目管理系统--论文pf

TOC springboot527基于Java企业项目管理系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上…

指针详解(五)

目录 1. 回调函数 2. qsort使用举例 1&#xff09;排序整型数据 2&#xff09;排序结构数据 3. qsort函数的模拟实现&#xff08;冒泡&#xff09; 1. 回调函数 回调函数就是一个通过函数指针调用的函数 函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数…

【python】Python实现XGBoost算法的详细理论讲解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

AI文字生成漫画短视频系统工具搭建部署,AI文生漫画短视频

目录 前言&#xff1a; 一、AI文生动漫小程序具有以下特点和功能&#xff1a; 二、文生动漫目前有哪些项目&#xff1f; 三、怎么搭建文生动漫小程序&#xff1f; 前言&#xff1a; AI文生动漫小程序是一款基于人工智能技术开发的动漫创作工具。它利用先进的机器学习算法&a…

大数据处理与智慧营销系统性能优化

随着企业数字化转型的加速&#xff0c;客户经营数字化正在向智能化方向发展&#xff0c;构建全场景、全流程、全触点的数字化、智能化的客户经营智慧营销体系。智慧营销系统已运行 5 年&#xff0c;伴随着业务增长&#xff0c;系统业务流程复杂度增大&#xff0c;大表数据量已超…

FreeSWITCH Record

1概述 FreeSWITCH https://signalwire.com/freeswitch是一个开源的电话交换平台。官方给它的定义是–世界上第一个跨平台的、伸缩性极好的、免费的、多协议的电话软交换平台。由这个定义我们可以得出以下几点: FreeSWITCH是跨平台的。它能原生地运行于Windows、MaxOSX、Linux、…

计算几何,CF 993A - Two Squares

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 A - Two Squares 二、解题报告 1、思路分析 由于数据量很小&#xff0c;可…

《Redis核心技术与实战》学习笔记5——内存快照RDB:宕机后,Redis如何实现快速恢复?

文章目录 给哪些内存数据做快照&#xff1f;快照时数据能修改吗?可以每秒做一次快照吗&#xff1f;小结 大家好&#xff0c;我是大白。 上篇文章记录了 Redis 避免数据丢失的 AOF 方法。这个方法的好处&#xff0c;是每次执行只需要记录操作命令&#xff0c;需要持久化的数据量…

11.4k star! 部署清华开源的ChatGLM3,用私有化大模型无缝替换openai

转自AI技术实战 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的第三代开源模型&#xff0c;对话流畅、部署门槛低&#xff0c;测评显示其基础模型ChatGLM3-6B-Base 具有在 10B 以下的基础模型中最强的性能&#xff0c;同时…

ESP32CAM人工智能教学19

ESP32CAM人工智能教学19 Udp socket服务器 本课的工作模式,正好是第十四课工作模式的相反:第十四课中,ESP32Cam是客户端,运行在PC中的Python程序是服务器,就收到了摄像头数据后,调用openCV组件显示图像。而本课的ESP32Cam是服务器,Python是客户端,正好掉了个个,目的就…

蓝桥杯编程题讲解

给定一个正整数 N ,然后将 N 分解成 3 个正整数之和。 计算出共有多少种符合要求的分解方法。 要求&#xff1a; 分解的 3 3 3个正整数各不相同; 分解的 3 3 3个正整数中都不含数字3和7. 如&#xff1a;N为8&#xff0c;可分解为 ( 1 , 1 , 6 ) (1,1,6) (1,1,6)、 ( 1 , 2 ,…

位图与布隆过滤器 —— 海量数据处理

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;C从入门到精通 目录 &#x1f680; 位图 一&#xff1a; &#x1f525; 位图概念 二&#xff1a; &#x1f525; 位图的实现思路及代码实现三&#xff1a; &#x1f525; 位图的应用四&#xff1a;…