#QT(网络编程-UDP)

news/2024/5/18 15:59:38 标签: udp, 网络协议, 网络

1.IDE:QTCreator


2.实验:UDP

不分客户端和服务端


3.记录

(1)做一个UI界面

 (2)编写open按钮代码进行测试(用网络调试助手测试)

 

(3)完善其他功能测试


4.代码

pro

QT       += core gui network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

 widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QUdpSocket>         //
#include <QString>           //
#include <QHostAddress>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT
    QUdpSocket *udpsocket;    //
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_open_pb_clicked();
    void readyRead_slot();
    void on_close_pb_clicked();

    void on_send_pb_clicked();

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

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>        //
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    udpsocket = new QUdpSocket(this);   //
}

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

void Widget::on_open_pb_clicked()     //打开按钮按下处理函数
{
    if(udpsocket->bind(ui->local_port->text().toUInt())==true)      //连接成功
     {
        QMessageBox::information(this,"提示","连接成功");
     }
    else
     {
        QMessageBox::critical(this,"警告","连接失败");
     }
    connect(udpsocket,SIGNAL(readyRead()),this,SLOT(readyRead_slot()));
}

void Widget::readyRead_slot()         //准备读关联函数
{
    while (udpsocket->hasPendingDatagrams()) {
        QByteArray array;
        array.resize(udpsocket->pendingDatagramSize());
        udpsocket->readDatagram(array.data(),array.size());
        QString buf;
        buf=array.data();
        ui->receive_line->appendPlainText(buf);
    }
}


void Widget::on_close_pb_clicked()         //关闭按钮按下时
{
    udpsocket->close();
}


void Widget::on_send_pb_clicked()          //发送按钮按下时
{
    quint16 port;
    QString sendbuff;
    QHostAddress address;
    address.setAddress(ui->des_ip->text());      //设置目标IP
    sendbuff=ui->send_line->text();     //发送内容存入数组
    port=ui->des_port->text().toUInt();                  //目标端口赋值
    udpsocket->writeDatagram(sendbuff.toLocal8Bit().data(),sendbuff.length(),address,port);    //udp向指定的IP地址的指定端口发送数据
}


http://www.niftyadmin.cn/n/5416877.html

相关文章

c# 多线程创建及线程同步

在C#中&#xff0c;线程是使用Thread类处理的&#xff0c;该类在System.Threading命名空间中。 ManagedThreadId是确认线程的唯一标识符&#xff0c;程序在大部分情况下都是通过Thread.ManagedThreadId来辨别线程的。如获取当前线程的id&#xff1a; int a Thread.CurrentTh…

SpringBoot整合Redis实现分布式锁

SpringBoot整合Redis实现分布式锁 分布式系统为什么要使用分布式锁&#xff1f; 首先&#xff0c;分布式系统是由多个独立节点组成的&#xff0c;这些节点可能运行在不同的物理或虚拟机器上&#xff0c;它们通过网络进行通信和协作。在这样的环境中&#xff0c;多个节点可能同…

海洋科学—物理海洋学 第八章 大气与海洋

一、地球大气的平均状态 1、地球大气的成分与气象要素 &#xff08;1&#xff09;地球大气的成分 地球大气由多种气体组成&#xff0c;并掺有一些悬浮的固体和液体微粒。在85 km 以下的各种气体成分中&#xff0c; 一般可分为两类。 一类称为定常成分&#xff0c;各成分间大致保…

JavaWeb基础入门——(二)MySQL数据库基础(5-存储过程)

八、存储过程 8.1 存储过程介绍 8.1.1 SQL指令执行过程 从SQL执行执行的流程中我们分析存在的问题&#xff1a; 如果我们需要重复多次执行相同的SQL&#xff0c;SQL指令都需要通过连接传递到MySQL&#xff0c;并且需要经过编译和执行的步骤&#xff1b; 如果我们需要连续执行…

【CCS2022】STAR: Secret Sharing for Private Threshold Aggregation Reporting

STAR为数据收集提供了一种新的、更为私密和有效的方法&#xff0c;能够帮助开发者在收集关键的应用使用信息的同时&#xff0c;保护用户的隐私。 文章目录 1.论文原文2.概述3.主要背景4.使用的密码学原语4.1 对称加密4.2 秘密共享4.3 VOPRF&#xff08;可验证的不经意伪随机数函…

[数据集][目标检测]遥感图像游泳池检测数据集VOC+YOLO格式288张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;288 标注数量(xml文件个数)&#xff1a;288 标注数量(txt文件个数)&#xff1a;288 标注类别…

CSS中em/px/rem/vh/vw区别详解

文章目录 一、介绍二、单位pxemremvh、vw 三、总结 一、介绍 传统的项目开发中&#xff0c;我们只会用到px、%、em这几个单位&#xff0c;它可以适用于大部分的项目开发&#xff0c;且拥有比较良好的兼容性 从CSS3开始&#xff0c;浏览器对计量单位的支持又提升到了另外一个境…

Navicat Premium:掌控数据库的强大工具

在当今数字化的时代&#xff0c;数据管理变得越来越重要。无论您是数据库管理员、开发人员还是普通用户&#xff0c;找到一个高效、易用的数据库管理工具是至关重要的。Navicat Premium for Mac/Win 就是这样一款强大的多协议数据库管理工具&#xff0c;它将为您的数据库管理体…