Qt第十三天:网络编程:TCP和UDP的使用

我发现了有些人喜欢静静看博客不聊天呐,

但是ta会点赞。

这样的人呢帅气低调有内涵,

美丽大方很优雅。

说的就是你,

不用再怀疑哦

❤️TCP:

一、创建项目,命名为Server,继承QWidget

二、添加Qt设计师类

三、设计client.ui和server.ui文件

布局和命名 

四、配置文件添加network模板,引入头文件

server.h文件:

#ifndef SERVER_H
#define SERVER_H#include <QWidget>
// QT += network加了这个不会报错
#include <QTcpServer>
#include <QTcpSocket>QT_BEGIN_NAMESPACE
namespace Ui {
class Server;
}
QT_END_NAMESPACEclass Server : public QWidget
{Q_OBJECTpublic:Server(QWidget *parent = nullptr);~Server();private:Ui::Server *ui;QTcpServer *MonitorSocket; // 监听的套接字QTcpSocket *CommuniactionSocket; //通信的套接字
};
#endif // SERVER_H

client.h文件:

#ifndef CLIENT_H
#define CLIENT_H#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>namespace Ui {
class CLient;
}class CLient : public QWidget
{Q_OBJECTpublic:explicit CLient(QWidget *parent = nullptr);~CLient();private:Ui::CLient *ui;QTcpSocket *ClientSocket; //套接字
};#endif // CLIENT_H

完整代码

server.cpp文件

#include "server.h" // 引入服务器头文件
#include "ui_server.h" // 引入用户界面服务器头文件Server::Server(QWidget *parent) // 构造函数,传入父窗口指针: QWidget(parent) // 初始化基类QWidget, ui(new Ui::Server) // 实例化用户界面对象
{ui->setupUi(this); // 设置用户界面// 设置ip和端口ui->SeverIP->setText("127.0.0.1"); // 设置服务器IP地址为本地回环地址ui->SeverPort->setText("8080"); // 设置服务器端口为8080// 实例化,初始化 监听的套接字MonitorSocket = new QTcpServer(this); // 创建一个新的TCP服务器对象// 监听 提取SeverIP(textEdit)的字符串,端口转intMonitorSocket->listen(QHostAddress(ui->SeverIP->text()), ui->SeverPort->text().toInt()); // 监听指定的IP地址和端口// 建立新的链接connect(MonitorSocket, &QTcpServer::newConnection, this, [=](){// 实例化,初始化 通信的套接字CommuniactionSocket = MonitorSocket->nextPendingConnection(); // 获取下一个待处理的连接ui->record->append("有新的链接"); // 在记录框中添加新链接提示// 保证CommuniactionSocket是一个有效的对象connect(CommuniactionSocket, &QTcpSocket::readyRead, this, [=](){// 接收数据QByteArray array = CommuniactionSocket->readAll(); // 读取所有可用的数据ui->record->append(array); // 将接收到的数据添加到记录框中});});// 发送按钮的实现connect(ui->send, &QPushButton::clicked, this, [=](){// 从输入框获取文本内容并发送CommuniactionSocket->write(ui->input->toPlainText().toUtf8().data()); // 将输入框中的文本转换为UTF-8编码并发送ui->record->append("Sever say:" + ui->input->toPlainText()); // 在记录框中添加发送的信息// 清除文本内容ui->input->clear(); // 清空输入框});
}Server::~Server() // 析构函数
{delete ui; // 删除用户界面对象
}

client.cpp文件

#include "client.h" // 引入客户端头文件
#include "ui_client.h" // 引入客户端界面头文件CLient::CLient(QWidget *parent) // 构造函数,传入父窗口指针: QWidget(parent) // 初始化基类QWidget, ui(new Ui::CLient) // 实例化UI对象
{ui->setupUi(this); // 设置UI界面// 设置服务器IP和端口ui->SeverIP->setText("127.0.0.1");ui->SeverPort->setText("8080");// 实例化并初始化监听套接字ClientSocket = new QTcpSocket(this);// 连接到服务器,提取IP地址和端口号ClientSocket->connectToHost(QHostAddress(ui->SeverIP->text()), ui->SeverPort->text().toInt());// 当有数据可读时,触发readyRead信号connect(ClientSocket, &QTcpSocket::readyRead, this, [=](){QByteArray array = ClientSocket->readAll(); // 读取所有数据到字节数组ui->record->append(array); // 将数据显示在记录框中});// 当发送按钮被点击时,触发clicked信号connect(ui->send, &QPushButton::clicked, this, [=](){// 从输入框获取文本并发送给服务器ClientSocket->write(ui->input->toPlainText().toUtf8().data());ui->record->append("Client say:" + ui->input->toPlainText()); // 在记录框中显示发送的消息// 清空输入框内容ui->input->clear();});
}CLient::~CLient() // 析构函数
{delete ui; // 删除UI对象
}

 main.cpp文件

#include "server.h"
#include <QApplication>
#include "client.h" //头文件int main(int argc, char *argv[])
{QApplication a(argc, argv);Server w;// 客户端显示,注意包含头文件CLient c;c.show();w.show();return a.exec();
}

运行结果

 

❤️UDP:

一、创建项目,命名为Server,继承QWidget

二、添加Qt设计师类

三、设计client.ui和server.ui文件

注意布局和命名 

四、配置文件添加network模板,引入头文件

server.h文件:

#ifndef SERVER_H
#define SERVER_H#include <QWidget>
#include <QUdpSocket>QT_BEGIN_NAMESPACE
namespace Ui {
class Server;
}
QT_END_NAMESPACEclass Server : public QWidget
{Q_OBJECTpublic:Server(QWidget *parent = nullptr);~Server();private:Ui::Server *ui;QUdpSocket *UdpSocket; //套接字
};
#endif // SERVER_H

client.h文件:

#ifndef CLIENT_H
#define CLIENT_H#include <QWidget>
#include <QUdpSocket>namespace Ui {
class Client;
}class Client : public QWidget
{Q_OBJECTpublic:explicit Client(QWidget *parent = nullptr);~Client();private:Ui::Client *ui;QUdpSocket *UdpSocket; //套接字
};#endif // CLIENT_H

完整代码

server.cpp文件:

#include "server.h" // 引入服务器头文件
#include "ui_server.h" // 引入用户界面服务器头文件
#include <QHostAddress> // 引入QHostAddress类,用于处理IP地址Server::Server(QWidget *parent): QWidget(parent) // 继承自QWidget类,设置父对象为parent, ui(new Ui::Server) // 创建一个新的Ui::Server对象
{ui->setupUi(this); // 初始化用户界面ui->ClientIP->setText("127.0.0.1"); // 设置客户端IP地址为本地回环地址ui->ClientPort->setText("8080"); // 设置客户端端口号为8080ui->SeverPort->setText("9999"); // 设置服务器端口号为9999// 初始化UDP套接字UdpSocket = new QUdpSocket(this);// 绑定服务器端口UdpSocket->bind(ui->SeverPort->text().toInt());// 当点击发送按钮时,发送数据connect(ui->send, &QPushButton::clicked, this, [=](){// 向指定的客户端IP和端口发送数据UdpSocket->writeDatagram(ui->input->toPlainText().toUtf8(),QHostAddress(ui->ClientIP->text()), ui->ClientPort->text().toInt());ui->input->clear(); // 清空输入框});// 当有数据可读时,读取并显示数据connect(UdpSocket, &QUdpSocket::readyRead, this, [=](){qint64 size = UdpSocket->pendingDatagramSize(); // 获取待读取的数据大小QByteArray array(size, 0); // 创建一个字节数组用于存储数据UdpSocket->readDatagram(array.data(), size); // 读取数据到字节数组ui->record->append(array); // 将数据显示在记录框中});
}Server::~Server()
{delete ui; // 释放用户界面资源
}

client.cpp文件:

#include "client.h" // 引入客户端头文件
#include "ui_client.h" // 引入客户端界面头文件Client::Client(QWidget *parent): QWidget(parent) // 继承自QWidget类,设置父对象为传入的parent, ui(new Ui::Client) // 创建一个新的Ui::Client对象并初始化
{ui->setupUi(this); // 使用Ui::Client对象的setupUi方法设置界面ui->ServerIP->setText("127.0.0.1"); // 设置服务器IP地址为本地回环地址ui->ServerPort->setText("9999"); // 设置服务器端口号为9999ui->ClientPort->setText("8080"); // 设置客户端端口号为8080// 初始化UDP套接字UdpSocket = new QUdpSocket(this);// 绑定客户端端口UdpSocket->bind(ui->ClientPort->text().toInt());// 当点击发送按钮时,执行以下操作connect(ui->send, &QPushButton::clicked, this, [=](){// 向服务器发送数据,包括输入框中的文本内容、服务器IP地址和端口号UdpSocket->writeDatagram(ui->input->toPlainText().toUtf8(),QHostAddress(ui->ServerIP->text()), ui->ServerPort->text().toInt());ui->input->clear(); // 清空输入框});// 当UDP套接字有数据可读时,执行以下操作connect(UdpSocket, &QUdpSocket::readyRead, this, [=](){qint64 size = UdpSocket->pendingDatagramSize(); // 获取待读取的数据大小QByteArray array(size, 0); // 创建一个字节数组用于存储数据UdpSocket->readDatagram(array.data(), size); // 读取数据到字节数组中ui->record->append(array); // 将接收到的数据追加到记录框中});
}Client::~Client()
{delete ui; // 析构函数,释放ui对象内存
}

main.cpp文件:

#include "server.h"
#include <QApplication>
#include "client.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);Server w;Client c;c.show();w.show();return a.exec();
}

运行结果

补充知识点:

tcp

udp 

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

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

相关文章

如何进行数学家式的学习思考?

如何进行数学家式的学习思考&#xff1f; 学生阶段的数学学习是非常重要的&#xff0c;对这一点很少有人质疑。一提起数学学习&#xff0c;一些学生、家长甚至一些教师认为&#xff0c;学生的数学学习往往侧重于掌握基本概念、公式和解题技巧&#xff0c;通过做题来巩固知识和提…

【飞腾加固服务器】全国产化解决方案:飞腾FT2000+/64核,赋能关键任务保驾护航

在信息安全和自主可控的时代背景下&#xff0c;国产化设备的需求与日俱增&#xff0c;尤其是在国防、航空航天、能源和其他关键行业。高可靠性和极端环境设计的国产加固服务器&#xff0c;搭载强大的飞腾FT2000/64核处理器&#xff0c;全面满足国产自主可控的严苛要求。 性能强…

【Linux探索学习】第六弹——Linux的工具(一):Ubuntu系统下的软件包管理器

前言&#xff1a; 在Ubuntu系统中&#xff0c;Linux工具为用户提供了强大的命令行操作能力。这些工具不仅使日常任务的自动化成为可能&#xff0c;还大幅提升了生产力。本文将重点介绍一些常用的Linux工具&#xff1a;软件包管理器 注意&#xff1a;本文是所讲解的内容是在Ubun…

【C++基础篇】——逐步了解C++

【C基础篇】——逐步了解C 文章目录 【C基础篇】——逐步了解C前言一、C的第一个程序二、命名空间1.namespace的价值2.namespace的定义3.命名空间的使用 三、C的输入&输出四、缺省参数五、函数重载六、引用1.引用的概念和定义&#xff1a;2.引用的特性3.引用的使用4.const引…

使用LangGraph构建多Agent系统架构!

0 前言 Agent是一个使用大语言模型决定应用程序控制流的系统。随着这些系统的开发&#xff0c;它们随时间推移变得复杂&#xff0c;使管理和扩展更困难。如你可能会遇到&#xff1a; Agent拥有太多的工具可供使用&#xff0c;对接下来应该调用哪个工具做出糟糕决策上下文过于…

51单片机的超声波视力保护仪【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器光照传感器超声波传感器按键、LED、蜂鸣器等模块构成。适用于视力保护仪、坐姿矫正器、超声波防近视等相似项目。 可实现功能: 1、LCD1602显示温度、光照、距离和学习时间 2、超声波传感器采集头部与探…

【计算机网络】HTTP报文详解,HTTPS基于HTTP做了哪些改进?(面试经典题)

HTTP协议基本报文格式 在计算机网络中&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;是应用层的一种协议&#xff0c;用于客户端&#xff08;通常是浏览器&#xff09;和服务器之间的通信。HTTP报文分为请求报文和响应报文&#xff0c;以下是它们的基本格式。 1. H…

基于Java微信小程序的水果销售系统详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

PyTorch 介绍

什么是 PyTorch PyTorch 是一个开源的机器学习库&#xff0c;广泛用于计算机视觉和自然语言处理等应用。它由 Facebook 的人工智能研究团队开发&#xff0c;并得到了许多其他机构和个人的贡献。PyTorch 以其易用性、灵活性和动态计算图&#xff08;也称为自动微分系统&#xf…

Nexpose 6.6.273 发布,新增功能概览

Nexpose 6.6.273 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, released Oct 10, 2024 请访问原文链接&#xff1a;https://sysin.org/blog/nexpose-6/ 查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 您的本地…

python学习-怎么在Pycharm写代码

打开Pycharm&#xff0c;点击文件-新建项目 2.选择pure python-点击箭头 展开 3.选择 Existing interpreter 如果 Existing interpreter 下没有相关环境 &#xff08;1&#xff09;点击**…** &#xff08;2&#xff09;选择python的安装路径 4.可修改文件名称-点击创建 …

STM32CUBEIDE的使用【三】RTC

于正点原子潘多拉开发板&#xff0c;使用stm32官方免费软件进行开发 CubeMx 配置 使用CubeMx 配置RTC 勾选RTC 设置日期和时间 配置LCD的引脚用来显示 STM32CUBEIDE 在usbd_cdc_if.c中重定向printf函数用于打印 #include <stdarg.h>void usb_printf(const char *f…

API项目5:申请签名 在线调用接口

开发申请签名 现在用户已经能看到这个接口了&#xff0c;也能看到这个接口文档&#xff0c;接下来就要在线调用 现在我们可以给每个新注册的用户自动分配一个签名和密钥&#xff0c;去修改一下注册流程&#xff1a; backend 项目&#xff0c;找到 UserServiceImpl.java 中的…

Miniconda管理虚拟环境【Python环境配置】

Miniconda管理虚拟环境【Python环境配置】 1. 下载并安装Miniconda2. 管理虚拟环境3. 管理虚拟环境中的包 1. 下载并安装Miniconda 1. 下载 从清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载Miniconda&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda…

go压缩的使用

基础&#xff1a;使用go创建一个zip func base(path string) {// 创建 zip 文件zipFile, err : os.Create("test.zip")if err ! nil {panic(err)}defer zipFile.Close()// 创建一个新的 *Writer 对象zipWriter : zip.NewWriter(zipFile)defer zipWriter.Close()// 创…

使用开源的 Vue 移动端表单设计器创建表单

FcDesigner Vant 版是一款基于 Vue3.0 的移动端低代码可视化表单设计器工具&#xff0c;通过数据驱动表单渲染。可以通过拖拽的方式快速创建表单&#xff0c;提高开发者对表单的开发效率&#xff0c;节省开发者的时间。 源码下载 | 演示地址 | 帮助文档 本项目采用 Vue3.0 和 …

HCIP open-Euler学习文档

第一期 操作系统基础&#xff0c;web基础 OpenEuler 目录 学习系统常用应用(Apache Nginx DNS MySQL)服务器集群架构(HAProxy, Nginx, LVS,keepalived)存储管理(GlusterFS,NAS,SAN)自动化基础(Ansible,SaltStack)Shell脚本基础(变量&#xff0c;语法&#xff0c;函数&…

使用fpm工具制作Vim.rpm包

背景&#xff1a;生产环境中的CentOS 7在安全扫描中被扫描出vim存在堆缓冲区溢出&#xff08;CVE-2024-45306&#xff09;等漏洞。根据漏洞说明&#xff0c;需要升级到最新版。 奈何CentOS 7已经停止维护了&#xff0c;所以&#xff0c;想在网上找一个最新版的vim.rpm相当不容易…

腾讯云宝塔面板前后端项目发版

后端发版 1. 打开“网站”页面&#xff0c;找到java项目&#xff0c;点击状态暂停服务 2.打开“文件”页面&#xff0c;进入jar包目录&#xff0c;删除原有的jar包&#xff0c;上传新jar包 3. 再回到第一步中的网站页面&#xff0c;找到jar项目&#xff0c;启动项目即可 前端发…

跨境业务收款难?Zoho Books来帮忙

外贸跨境企业应收账款管理繁琐&#xff0c;ZohoBooks财务管理软件提供自动化解决方案&#xff0c;简化开票、跟进、收款和账户更新流程&#xff0c;提升效率和准确性&#xff0c;助力企业优化现金流和财务健康。 什么是应收账款&#xff1f; 应收账款指的是企业在提供商品或服…