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

QT 实现仿制 网络调试器(未实现连接唯一性) QT5.12.3环境 C++实现

网络调试助手:


提前准备:在编写代码前,要在.pro工程文件中,添加network模块。


服务端:

代码:

widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QtWidgets>
#include <QTcpServer> // 监听套接字
#include <QTcpSocket> // 通讯套接字
namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();private slots:void on_start_button_clicked(); // 启动按钮slotvoid new_connection_slot(); // 连接slotvoid ready_read_slot(); // 可读slotvoid on_send_button_clicked(); // 发送按钮slotprivate:Ui::Widget *ui;QTcpServer *tcp_server; // 服务端QTcpSocket *tcp_socket; // socket
};#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);this->setWindowTitle("网络调试器服务端"); // 标题// 实例化监听套接字tcp_server = new QTcpServer(this);tcp_socket = nullptr;connect(tcp_server,&QTcpServer::newConnection,this,&Widget::new_connection_slot);
}Widget::~Widget()
{delete ui;
}void Widget::on_start_button_clicked()
{// 监听( bind() + listen() )if(ui->start_button->text() == "启动"){QString ip = ui->ip_edit->text(); // 读取ipQString port = ui->port_edit->text(); // 读取portif(!tcp_server->listen(QHostAddress(ip),port.toUShort())){ui->plainTextEdit->setPlainText("服务端启动失败....");}else{ui->plainTextEdit->setPlainText("服务端启动成功....");ui->start_button->setText("断开"); // 改变按钮文本}}else if(ui->start_button->text() == "断开"){tcp_server->close(); // 关闭ui->plainTextEdit->appendPlainText("服务器断开成功....");ui->start_button->setText("启动"); // 改变按钮文本}
}void Widget::new_connection_slot()
{tcp_socket = tcp_server->nextPendingConnection();QString client_ip = tcp_socket->peerAddress().toString(); // 获取客户端ip(转换成QString)quint16 client_port = tcp_socket->peerPort();ui->plainTextEdit->appendPlainText(QString("客户端 IP: %1  PORT:%2 连接成功").arg(client_ip).arg(client_port));connect(tcp_socket,&QTcpSocket::readyRead,this,&Widget::ready_read_slot);
}void Widget::ready_read_slot()
{QByteArray buf = tcp_socket->readAll(); // 读数据QString s = QString::fromLocal8Bit(buf); // 编码转换ui->plainTextEdit->appendPlainText(QString("服务端发来数据:%1").arg(QString(s))); // 显示
}void Widget::on_send_button_clicked()
{QString buf = ui->send_edit->text(); // 读数据tcp_socket->write(buf.toLocal8Bit()); // 发送数据ui->plainTextEdit->appendPlainText(QString("服务端发送数据:%1").arg(buf)); // 显示}
widget.ui


输出:


客户端:

代码:

widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpSocket>
namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();private slots:void on_start_button_clicked(); // 连接按钮slotvoid ready_read_slot(); // 可读slotvoid on_send_button_clicked(); // 发送按钮slotprivate:Ui::Widget *ui;QTcpSocket *tcp_sock; // socket
};#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);tcp_sock = new QTcpSocket(this);this->setWindowTitle("网络调试器客户端"); // 标题connect(tcp_sock,&QTcpSocket::readyRead,this,&Widget::ready_read_slot);
}Widget::~Widget()
{delete ui;
}void Widget::on_start_button_clicked()
{QString ip = ui->ip_edit->text(); // 获取ipQString port = ui->port_edit->text(); // 获取portif(ui->start_button->text() == "连接"){tcp_sock->connectToHost(ip,port.toUShort()); // 连接if(tcp_sock->waitForConnected()){ui->plainTextEdit->setPlainText("连接服务器成功...");ui->start_button->setText("断开"); // 改变按钮文本}else{ui->plainTextEdit->setPlainText("连接服务器失败...");}}else if(ui->start_button->text() == "断开"){tcp_sock->close(); // 关闭ui->plainTextEdit->appendPlainText("客户端断开成功....");ui->start_button->setText("连接"); // 改变按钮文本}
}void Widget::ready_read_slot(){QByteArray buf = tcp_sock->readAll(); // 读数据QString data = QString::fromLocal8Bit(buf); // 编码转换ui->plainTextEdit->appendPlainText(QString("服务端发来数据 %1").arg(data));
}void Widget::on_send_button_clicked()
{QString buf = ui->send_edit->text(); // 获取数据tcp_sock->write(buf.toLocal8Bit()); // 编码转换ui->plainTextEdit->appendPlainText(QString("服务端发送数据 %1").arg(buf));
}
widget.ui


输出:


测试:

同时打开服务端和客户端

启动服务端并连接客户端

发送文本测试

断开连接

相关文章:

QT 实现仿制 网络调试器(未实现连接唯一性) QT5.12.3环境 C++实现

网络调试助手&#xff1a; 提前准备&#xff1a;在编写代码前&#xff0c;要在.pro工程文件中&#xff0c;添加network模块。 服务端&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QtWidgets> #inclu…...

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-31

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…...

面试题---深入源码理解MQ长轮询优化机制

引言 在分布式系统中&#xff0c;消息队列&#xff08;MQ&#xff09;作为一种重要的中间件&#xff0c;广泛应用于解耦、异步处理、流量削峰等场景。其中&#xff0c;延时消息和定时消息作为MQ的高级功能&#xff0c;能够进一步满足复杂的业务需求。为了实现这些功能&#xf…...

stable diffusion生成模型

1、stable diffusion Stable Diffusion 是一种扩散模型,基于对图像的逐步去噪过程训练和生成。它的核心包括以下几个步骤: 扩散过程(Diffusion Process)在训练时,向真实图像逐步添加噪声,最终将其变为纯随机噪声。这是一个正向过程,目的是学习如何将复杂的图像分解成随…...

分治法的魅力:高效解决复杂问题的利器

文章目录 分治法 (Divide and Conquer) 综合解析一、基本原理二、应用场景及详细分析1. 排序算法快速排序 (Quicksort)归并排序 (Mergesort) 2. 大整数运算大整数乘法 3. 几何问题最近点对问题 4. 字符串匹配KMP算法的优化版 三、优点四、局限性五、分治法与动态规划的对比六、…...

Spring IOC实战指南:从零到一的构建过程

Spring 优点&#xff1a; 方便解耦&#xff0c;简化开发。将所有对象创建和依赖关系维护交给 Spring 管理(IOC 的作用)AOP 切面编程的支持。方便的实现对程序进行权限的拦截、运行监控等功能(可扩展性)声明式事务的支持。只需通过配置就可以完成对事务的管理&#xff0c;无需手…...

3.langchain中的prompt模板 (few shot examples in chat models)

本教程将介绍如何使用LangChain库和智谱清言的 GLM-4-Plus 模型来理解和推理一个自定义的运算符&#xff08;例如使用鹦鹉表情符号&#x1f99c;&#xff09;。我们将通过一系列示例来训练模型&#xff0c;使其能够理解和推断该运算符的含义。 环境准备 首先&#xff0c;确保…...

量子感知机

神经网络类似于人类大脑&#xff0c;是模拟生物神经网络进行信息处理的一种数学模型。它能解决分类、回归等问题&#xff0c;是机器学习的重要组成部分。量子神经网络是将量子理论与神经网络相结合而产生的一种新型计算模式。1995年美国路易斯安那州立大学KAK教授首次提出了量子…...

VM虚拟机装MAC后无法联网,如何解决?

✨在vm虚拟机上&#xff0c;给虚拟机MacOS设置网络适配器。选择NAT模式用于共享主机的IP地址 ✨在MacOS设置中设置网络 以太网 使用DHCP ✨回到本地电脑上&#xff0c;打开 服务&#xff0c;找到VMware DHCP和VMware NAT&#xff0c;把这两个服务打开&#xff0c;专一般问题就…...

IDEA 基本设置

设置主题 设置字体 设置编码格式 改变字体大小 开启 按住 ctrl 滚轮 改变字体大小。 开启自动编译...

Chrome 浏览器 131 版本新特性

Chrome 浏览器 131 版本新特性 一、Chrome 浏览器 131 版本更新 1. 在 iOS 上使用 Google Lens 搜索 自 Chrome 126 版本以来&#xff0c;用户可以通过 Google Lens 搜索屏幕上看到的任何图片或文字。 要使用此功能&#xff0c;请访问网站&#xff0c;并点击聚焦时出现在地…...

使用php和Xunsearch提升音乐网站的歌曲搜索效果

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

计算机毕设-基于springboot的高校网上缴费综合务系统视频的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…...

STL关联式容器之map

map的特性是&#xff0c;所有元素都会根据元素的键值自动被排序。map的所有元素都是pair&#xff0c;同时拥有实值(value)和键值(key)。pair的第一元素被视为键值&#xff0c;第二元素被视为实值。map不允许两个元素拥有相同的键值。下面是<stl_pair.h>中pair的定义 tem…...

【HarmonyOS】鸿蒙应用唤起系统相机拍照

【HarmonyOS】鸿蒙应用唤起系统相机拍照 方案一&#xff1a; 官方推荐的方式&#xff0c;使用CameraPicker来调用安全相机进行拍照。 let pathDir getContext().filesDir;let fileName ${new Date().getTime()}let filePath pathDir /${fileName}.tmpfileIo.createRandomA…...

Linux系统使用valgrind分析C++程序内存资源使用情况

内存占用是我们开发的时候需要重点关注的一个问题&#xff0c;我们可以人工根据代码推理出一个消耗内存较大的函数&#xff0c;也可以推理出大概会消耗多少内存&#xff0c;但是这种方法不仅麻烦&#xff0c;而且得到的只是推理的数据&#xff0c;而不是实际的数据。 我们可以…...

Java基础夯实——2.7 线程上下文切换

线程上下文切换&#xff08;Thread Context Switching&#xff09;是操作系统在多线程环境中&#xff0c;切换CPU从执行一个线程的上下文到另一个线程的上下文的过程。这种切换是实现多线程并发执行的核心机制之一。 1 上下文: 线程的上下文指线程在某一时刻的执行状态,如&am…...

死锁相关习题 10道 附详解

2022 设系统中有三种类型的资源(A,B,C)和五个进程(P1,P2,P3,P4,P5)&#xff0c;A资源的数量是17&#xff0c;B资源的数量是6&#xff0c;C资源的数量是19。在T0时刻系统的状态&#xff1a; 最大资源需求量已分配资源量A&#xff0c;B&#xff0c;CA&#xff0c;B&#xff0c;…...

VisionPro 机器视觉案例 之 彩色保险丝个数统计

第十四篇 机器视觉案例 之 彩色保险丝颜色识别个数统计 文章目录 第十四篇 机器视觉案例 之 彩色保险丝颜色识别个数统计1.案例要求2.实现思路2.1 方法一 颜色分离工具CogColorSegmenterTool将每一种颜色分离出来&#xff0c;得到对应的单独图像&#xff0c;使用斑点工具CogBlo…...

go-zero(七) RPC服务和ETCD

go-zero 实现 RPC 服务 在实际的开发中&#xff0c;我们是通过RPC来传递数据的&#xff0c;下面我将通过一个简单的示例&#xff0c;说明如何使用go-zero框架和 Protocol Buffers 定义 RPC 服务。 一、生成 RPC项目 在这个教程中&#xff0c;我们根据user.api文件&#xff0…...

Llama-3.2V-11B-cot效果展示:识别艺术海报中风格与主题逻辑断层

Llama-3.2V-11B-cot效果展示&#xff1a;识别艺术海报中风格与主题逻辑断层 1. 工具介绍 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具。该工具针对双卡4090环境进行了深度优化&#xff0c;特别适合需要分析复杂视觉内容的场景&…...

【程序源代码】外卖小程序系统设计与实现

关键字&#xff1a;java、mybatis、mysql、ssm、微信小程序、外卖、设计与实现、源码&#xff08;一&#xff09;系统介绍 名称&#xff1a;外卖微信小程序系统设计与实现&#xff08;含源码&#xff09; &#xff08;二&#xff09;详细介绍 下载资料&#xff1a;程序、数据…...

人工智能之数字生命 认知架构白皮书 第4章

《HY-Ego 认知架构白皮书》&#xff08;续&#xff09;4. 世界树&#xff08;World Tree&#xff09;——全局世界骨架 世界树是 HY-Ego 认知架构的全局事实骨架&#xff0c;负责对整个“世界”进行结构化建模、组织和维护。它与因果树并行独立运行&#xff0c;二者通过快照机制…...

AgentCPM深度研报助手使用技巧:三个参数让报告更专业

AgentCPM深度研报助手使用技巧&#xff1a;三个参数让报告更专业 1. 为什么你的AI研报总像“流水账”&#xff1f;问题可能出在参数上 你用过AI写报告&#xff0c;结果是不是这样&#xff1a;内容看起来都对&#xff0c;但读起来总觉得“差点意思”&#xff1f;结构松散像拼凑…...

SEO 和网站推广有什么区别_如何判断一个网站的 SEO 质量

SEO 和网站推广有什么区别 在数字营销的广阔天地中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;和网站推广是两个常被提及的概念。它们虽然都旨在提升网站的流量和知名度&#xff0c;但实际上&#xff0c;它们之间有着显著的区别。理解这两者的异同&#xff0c;对于有…...

Pixel Aurora Engine镜像部署:支持RTX 3060及以上显卡的轻量级方案

Pixel Aurora Engine镜像部署&#xff1a;支持RTX 3060及以上显卡的轻量级方案 1. 项目概览 Pixel Aurora Engine是一款专为像素艺术创作设计的AI绘图工作站&#xff0c;采用复古8-bit游戏风格界面&#xff0c;让AI艺术创作变得像玩游戏一样有趣。这个轻量级解决方案特别针对…...

百川2-13B-4bits量化版模型蒸馏:为OpenClaw定制更小尺寸专用模型

百川2-13B-4bits量化版模型蒸馏&#xff1a;为OpenClaw定制更小尺寸专用模型 1. 为什么需要为OpenClaw定制专用模型 去年冬天&#xff0c;当我第一次尝试在树莓派上部署OpenClaw时&#xff0c;遇到了一个尴尬的问题——即使是最轻量级的开源模型&#xff0c;也会让这个小家伙…...

如何写出高效的大模型提示词

大模型提示词编写的核心在于通过清晰、结构化的指令引导模型精准理解并执行任务。其技巧与最佳实践可归纳为明确任务目标、提供充分背景与约束、优化指令结构、以及利用先进框架与迭代优化。下表总结了关键要素与具体策略&#xff1a; 核心要素描述与目的具体实践与技巧角色 (…...

Win11Debloat:Windows系统深度优化工具的全方位解决方案

Win11Debloat&#xff1a;Windows系统深度优化工具的全方位解决方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...

1989-2017 年泛北极和北方地区冬季原位土壤 CO2 通量的综合分析

Synthesis of Winter In Situ Soil CO2 Flux in pan-Arctic and Boreal Regions, 1989-2017 简介 本数据集综合了来自泛北极和北方多年冻土区多个地点的冬季&#xff08;9 月至次年 4 月&#xff09;原位土壤 CO₂通量测量数据。这些原位数据来自 1989 年至 2017 年间开展的 …...