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

Qt UDP通信学习

Qt UDP通信学习

一、项目概述

本项目基于Qt框架实现了UDP通信功能,支持单播与广播消息收发,展示了UDP套接字的基本用法,适合初学者学习Qt网络模块的实际应用。

二、项目结构

  • 55.pro:Qt工程文件,配置模块与源码文件
  • main.cpp:程序入口,初始化应用与主窗口
  • widget.h / widget.cpp:主窗口类,包含UI与核心逻辑
  • widget.ui:界面文件(未展示,需在Qt Designer中查看)

三、环境配置

  • Qt 5.x及以上
  • 启用network、widgets模块
  • C++11支持

四、核心代码详解

1. main.cpp

#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

2. widget.h

#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:Ui::Widget *ui;           // UI指针QUdpSocket *udpSocket;    // UDP套接字对象
private slots:void readPendingDatagrams();      // 接收数据槽void on_pushButton_3_clicked();   // 单播发送按钮槽void on_pushButton_clicked();     // 绑定端口按钮槽void on_pushButton_2_clicked();   // 解除绑定按钮槽void on_pushButton_4_clicked();   // 广播发送按钮槽void mStateChanged(QAbstractSocket::SocketState); // 状态变化槽
};
#endif // WIDGET_H

3. 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);ui->pushButton_2->setEnabled(false);connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));connect(udpSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(mStateChanged(QAbstractSocket::SocketState)));
}
Widget::~Widget()
{delete ui;
}
void Widget::readPendingDatagrams()
{QByteArray tmpByteArray;tmpByteArray.resize(udpSocket->pendingDatagramSize());QHostAddress ipaddr;quint16 port;while (udpSocket->hasPendingDatagrams()) {udpSocket->readDatagram(tmpByteArray.data(), tmpByteArray.size(), &ipaddr, &port);ui->textBrowser->append("接收来自:" + ipaddr.toString() + ":" + QString::number(port) + tmpByteArray);}
}
void Widget::on_pushButton_3_clicked()
{ui->textBrowser->append("发送:" + ui->lineEdit->text());udpSocket->writeDatagram(ui->lineEdit->text().toUtf8(), QHostAddress("127.0.0.1"), 7755);
}
void Widget::on_pushButton_clicked()
{ui->pushButton->setEnabled(false);ui->pushButton_2->setEnabled(true);udpSocket->bind(8888);
}
void Widget::on_pushButton_2_clicked()
{udpSocket->abort();ui->pushButton->setEnabled(true);ui->pushButton_2->setEnabled(false);
}
void Widget::on_pushButton_4_clicked()
{ui->textBrowser->append("发送:" + ui->lineEdit->text());udpSocket->writeDatagram(ui->lineEdit->text().toUtf8(), QHostAddress::Broadcast, 7755);
}
void Widget::mStateChanged(QAbstractSocket::SocketState socketState)
{switch (socketState) {case QAbstractSocket::BoundState:ui->textBrowser->append("socket状态BoundState");default:break;}
}

文章转载自:

http://HdHotSqb.jxwhr.cn
http://FkZDLuLU.jxwhr.cn
http://ocKUMu7Z.jxwhr.cn
http://2wkOgeQX.jxwhr.cn
http://PsZEX5wV.jxwhr.cn
http://UdiPwdmK.jxwhr.cn
http://5wmpjzs7.jxwhr.cn
http://17KPqKTw.jxwhr.cn
http://Uw5FrQRe.jxwhr.cn
http://SEi9SaUu.jxwhr.cn
http://0bM3daQk.jxwhr.cn
http://uEQxzZ14.jxwhr.cn
http://fopb3kT1.jxwhr.cn
http://6jk32Qwb.jxwhr.cn
http://I1jPGcHJ.jxwhr.cn
http://U44GVnuP.jxwhr.cn
http://CieEpkke.jxwhr.cn
http://TP84fxYf.jxwhr.cn
http://Vlzhu4ht.jxwhr.cn
http://3iR3BJ3O.jxwhr.cn
http://aVHqFxjZ.jxwhr.cn
http://Wc9BPHuM.jxwhr.cn
http://esdKJR0F.jxwhr.cn
http://9G7ts3qS.jxwhr.cn
http://s7kbCyqF.jxwhr.cn
http://fsw1Px3l.jxwhr.cn
http://ZqCmNnmL.jxwhr.cn
http://RFArBkP5.jxwhr.cn
http://O18Q5Ap1.jxwhr.cn
http://y66NU7Jy.jxwhr.cn
http://www.dtcms.com/a/370394.html

相关文章:

  • Linux知识回顾总结----文件系统
  • 【完整源码+数据集+部署教程】农作物病害检测系统源码和数据集:改进yolo11-HSFPN
  • 计算机网络:调制解调器
  • solidity函数篇2
  • 【AI论文】ELV-Halluc:长视频理解中语义聚合幻觉的基准测评
  • v0.29.2 敏感词性能优化之基本类型拆箱、装箱的进一步优化的尝试
  • 提示词工程(Prompt Engineering)的崛起——为什么“会写Prompt”成了新技能?
  • 前端入门——案例一:登录界面设计(html+css+js)
  • MySQL的组复制(MGR)高可用集群搭建
  • 前端开发学习路径
  • JVM调优总结
  • 大模型API设计:如何用OpenAI兼容接口封装自定义模型?
  • 四个关于云属性的四个卫星数据集的介绍
  • WIN10+ubuntu22.04.05双系统装机教程
  • MCAP :机器人数据容器的全面实践指南
  • Pandas基础(安装、导入Pandas、读取数据、查看数据)
  • 【第四章:大模型(LLM)】10.微调方法与实战-(7)项目实战1:Llama3使用LoRA微调中文增强大模型
  • 没有深度学习
  • Redis-主从复制-哨兵模式
  • PPTist,一个完全免费的 AI 生成 PPT 在线网站
  • [水果目标检测5]AppleYOLO:基于深度OC-SORT的改进YOLOv8苹果产量估计方法
  • 跨平台游戏引擎 Axmol-2.8.1 发布
  • Linux系统编程—进程控制
  • 管理与监控(下)
  • 学习:uniapp全栈微信小程序vue3后台(11)
  • EG1160 SOP16 高压大电流 半桥驱动芯片
  • C++ STL系列-02.泛型入门
  • 大型Go项目中搭建CI/CD流水线
  • 【DCU】DCU产品与调试工具hy-smi使用指南:从基础到性能分析
  • 字节跳动OmniHuman-1.5发布:单图+音频秒变超真实视频,AI数字人技术再升级