Qt实现UDP客户端和服务端

news/2025/2/26 10:07:06/文章来源:https://www.cnblogs.com/tingtaishou/p/18737847

Qt 中实现 UDP 客户端和服务器相对简单,我们可以使用 QUdpSocket 类来完成。以下是一个基本的例子,包括 UDP 服务器和客户端的实现。

UDP 服务端实现

首先,创建一个简单的 UDP 服务器,例如 udp_server.cpp:

cpp

#include <QUdpSocket>  #include <QCoreApplication>  #include <iostream>  

class UdpServer : public QObject {  

    Q_OBJECT  public:  

    UdpServer(QObject *parent = nullptr) : QObject(parent) {  

        udpSocket = new QUdpSocket(this);  

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

 

        connect(udpSocket, &QUdpSocket::readyRead, this, &UdpServer::onReadyRead);  

        

        std::cout << "UDP Server is running on port 1234." << std::endl;  

    }  

private slots:  

    void onReadyRead() {  

        while (udpSocket->hasPendingDatagrams()) {  

            QByteArray buffer;  

            buffer.resize(udpSocket->pendingDatagramSize());  

            QHostAddress sender;  

            quint16 senderPort;  

 

            udpSocket->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort);  

            std::cout << "Received from " << sender.toString().toStdString()   

                      << ":" << senderPort << " - " << buffer.toStdString() << std::endl;  

 

            // Echo the message back  

            udpSocket->writeDatagram("Hello from server", sender, senderPort);  

        }  

    }  

private:  

    QUdpSocket *udpSocket;  

};  

int main(int argc, char *argv[]) {  

    QCoreApplication app(argc, argv);  

 

    UdpServer server;  

 

    return app.exec();  

}  

#include "udp_server.moc"  

UDP 客户端实现

接下来,创建一个简单的 UDP 客户端,例如 udp_client.cpp:

cpp

#include <QUdpSocket>  #include <QCoreApplication>  #include <iostream>  

class UdpClient : public QObject {  

    Q_OBJECT  public:  

    UdpClient(const QString &host, quint16 port, QObject *parent = nullptr) : QObject(parent) {  

        udpSocket = new QUdpSocket(this);  

        connect(udpSocket, &QUdpSocket::readyRead, this, &UdpClient::onReadyRead);  

 

        // Send message to the server  

        udpSocket->writeDatagram("Hello from client", QHostAddress(host), port);  

        std::cout << "Message sent to server." << std::endl;  

    }  

private slots:  

    void onReadyRead() {  

        while (udpSocket->hasPendingDatagrams()) {  

            QByteArray buffer;  

            buffer.resize(udpSocket->pendingDatagramSize());  

            QHostAddress sender;  

            quint16 senderPort;  

 

            udpSocket->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort);  

            std::cout << "Received from server: " << buffer.toStdString() << std::endl;  

        }  

    }  

private:  

    QUdpSocket *udpSocket;  

};  

int main(int argc, char *argv[]) {  

    QCoreApplication app(argc, argv);  

 

    UdpClient client("127.0.0.1", 1234);  

 

    return app.exec();  

}  

#include "udp_client.moc"  

编译和运行

确保你的项目文件 .pro 中包含网络模块。在 .pro 文件中添加:

pro

QT += core network  

CONFIG += c++11  

然后使用 qmake 和 make 编译项目:

bash

qmake  

make  

运行

  1. 首先运行 udp_server,在控制台中应显示 "UDP Server is running on port 1234."
  2. 然后运行 udp_client,它将发送消息到服务器,并在控制台中打印服务器的响应。

总结

以上代码展示了如何在 Qt 中实现一个简单的 UDP 客户端和服务器。服务器监听特定端口,接收客户端的消息,并将其回显。客户端发送一条消息,并等待响应。你可以根据需要对其进行扩展和修改以适应实际应用。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

没有源码,如何修改代码逻辑?

拍摄于西安德福巷前段时间接手了一个二次开发其他团队代码的项目,过程中发生了不少有意思的小插曲。今天正好有点空闲时间,就简单梳理一下,希望能给大家提供一些参考和帮助。当我咨询对方团队:“大哥,我们这边要对你们在xxx项目上的代码进行二次开发,想了解下你们的二开机…

deepseek本地部署硬件资源对比表.250226

‌DeepSeek在不同版本下的硬件资源需求对比表如下‌:版本 CPU核心数 GPU显存(GB) GPU类型 内存(GB) 存储需求(TB) 网络带宽(Mbps)1.5B 1-2 4 普通消费级(如RTX 3090/4090) 8-16 1 50-1007B 1-2 4 普通消费级(如RTX 3090/4090) 8-16 1 50-1008B 1-2 4 普通消费级(…

deepseek本地部署硬件资源对比表。250226

‌DeepSeek在不同版本下的硬件资源需求对比表如下‌:版本 CPU核心数 GPU显存(GB) GPU类型 内存(GB) 存储需求(TB) 网络带宽(Mbps)1.5B 1-2 4 普通消费级(如RTX 3090/4090) 8-16 1 50-1007B 1-2 4 普通消费级(如RTX 3090/4090) 8-16 1 50-1008B 1-2 4 普通消费级(…

用python画一个五星红旗

import turtle 设置画布和画笔 screen = turtle.Screen() 设置画布大小 screen.setup(800, 600) 设置画布背景颜色为红色,模拟五星红旗旗面颜色 screen.bgcolor("red") pen = turtle.Turtle() 设置画笔最快速度 pen.speed(0) 隐藏画笔箭头 pen.hideturtle() 定义绘制…

爬取东方财富网-parsel教学篇(正则表达式的详细使用+实例)

@目录前言导航正则表达式介绍正则表达式基本语法re库的使用常用函数案例源码运行截图共勉博客 前言 本文原本是想通过分享一个爬取东方财富网案例,来介绍parsel解析库的使用,没想到硬生生的写成了正则表达式的详细使用,想学习正则表达式的的小伙伴们可以来看下。 导航爬取小…

如何通过网管系统提升运维效率?

网络系统在企业信息化系统扮演着越来越重要的作用,网络规模不断扩大,网络结构越来越复杂,传统的运维方式已经难以满足高效、稳定运行的要求。网管系统作为IT运维的重要工具,能够帮助企业实现网络的智能化管理,显著提升运维效率。本文将探讨网管系统与IT运维的关系,并结合…

保证接口幂等性的这 7 种方案,绝了!

前言 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。 不知道你有没有遇到过这些场景:我们在填写某些form表单时,保存按钮不小心快速点了两次,表中…

毕设的踩坑之路

main()函数 在main()函数中调用 QMessageBox 之前一定要创建 QApplication 对象, 使用 QWidget 之前要创建 QApplication 对象. 不然会程序崩溃. 下面是笔者原先的代码: 之前是因为数据库等一切正常, 所以没有触发到连接数据库失败的 QMessageBox 消息. 后来有一次连接的时候数…

表格内cron表达式转成需要的时间格式

1.表格内添加 :formatter=""<el-table-columnlabel="监视周期"align="center"prop="corn":formatter="cornFormat"/>2.方法// 频率corn转时间格式cornFormat(row, column) {let str = row.corn;// let str = row.corn…

盲派八字推理 API 数据接口

盲派八字推理 API 数据接口 AI / 八字命理 基于八字命理分析 命理分析 / 八字运势。1. 产品功能基于八字命理以及盲派八字理论解析个人运势; 提供详细的大运分析,覆盖学业、婚姻、财运、健康等领域; 分析个人运势,包括学业、婚姻、财运、健康等方面的解读; 智能解读人生关…

2.25 CW 模拟赛 T4. 博弈论

前言 本来并不打算补这个题, 但是发现想拿到更好的分数, 应该对这题有更多的分析 至于 \(\rm{T3}\) , 除了让我知道分拆数类型的状态压缩 \(\rm{dp}\) 还可以乱搞, 没有什么意义, 现在也不太可能拥有这个水平 思路题意 给定一个序列A and B\textrm{A and B}A and B 每次可以在序…

20220226

沪锌 形态待验证 胶系看之前分析即可。后市看方向 17600-18200 https://www.cnblogs.com/lyonlee/p/18729353