当前位置: 首页 > 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://www.xdnf.cn/news/1481329.html

相关文章:

  • 《sklearn机器学习——模型的持久性》joblib 和 pickle 进行模型保存和加载
  • python的数据结构
  • redission实现读写锁的原理
  • TDengine 时间函数 WEEKDAY() 用户手册
  • 【PCIe EP 设备入门学习专栏 -- 8 PCIe EP 架构详细介绍】
  • dask.dataframe.shuffle.set_index中获取 divisions 的步骤分析
  • 单例模式(巨通俗易懂)普通单例,懒汉单例的实现和区别,依赖注入......
  • 【C++题解】DFS和BFS
  • leetcode 75 颜色分类
  • OS项目构建效能改进策划方案
  • 神马 M60S++ 238T矿机参数解析:高效SHA-256算法比拼
  • Docker加速下载镜像的配置指南
  • 计算机网络:物理层---数据通信基础知识
  • 【C++ 11 模板类】tuple 元组
  • 嵌入式笔记系列——UART:TTL-UART、RS-232、RS-422、RS-485
  • 旧电脑改造linux服务器2:安装系统
  • 软考中级习题与解答——第二章_程序语言与语言处理程序(3)
  • AD渗透中服务账号相关攻击手法总结(Kerberoasting、委派)
  • 数据仓库概要
  • 【selenium】网页元素找不到?从$(‘[placeholder=“手机号“]‘)说起
  • PyQt5 入门(上):开启 GUI 编程之旅
  • python advance -----object-oriented
  • URI与URL区别:资源ID和地址差异
  • Vue3中Vite的介绍与应用
  • 第1课:开篇:RAG技术与DeepSeek模型全景导读
  • Cloudflare for SaaS 实现 CNAME 接入 CDN 支持国内外智能分流建站
  • AI Agent侵入办公室
  • Android Audio Patch
  • 长尾关键词优化驱动SEO流量增长
  • 链动2+1模式:全渠道整合与用户角色化的商业逻辑与行为动机探析