QT中TCP的学习
文章目录
- qt中TCP的实现
qt中TCP的实现
-
学习视频
-
QT中可以通过TCP协议让服务器和客户端之间行通信。服务器和客户端的具体流程

-
下方的信号都是系统提供的,我们只需要写相应的槽函数
A、服务器:
- 创建QTcpServer对象
- 启动服务器(监听)调用成员方法listen(
QHostAddress::Any,端口号) - 当有客户端链接时候会发送
newConnection()信号,触发自定义槽函数接受链接(使用nextPendingConnection()与客户端建立连接,得到一个与客户端通信的套接字QTcpSocket) - QTcpsocket发送数据用成员方法
write, - 读数据当客户端有数据来,QTcpSocket对象就会发送
readyRead()信号,触发自定义槽函数读取数据
B、客户端 :
- 创建QTcpSocket对象
- 链接服务器
connectToHost(QHostAddress("ip"),端口号) - QTcpsocket发送数据用成员方法
write, - 读数据当对方有数据来,QTcpSocket对象就会发送
readyRead()信号,触发自定义槽函数读取数据
直接上源码
- 此代码在vs2017环境下写的
- 会有详细注释,仔细阅读代码
先添加network模块

测试效果:

textSever.h
#pragma once#include <QtWidgets/QMainWindow>
#include "ui_textSever.h"
#include <QTcpServer.h>
#include <QTcpSocket.h>class textSever : public QMainWindow
{Q_OBJECTpublic:textSever(QWidget *parent = nullptr);~textSever();signals:public slots:void new_connect();// 有新的连接void rev_mag();// 接收发送过来的消息void send_mag();// 发送消息private:Ui::textSeverClass ui;QTcpServer* severSocket;// 监听套接字QTcpSocket* clientSocket;// 通信套接字
};
textSever.cpp
#include "textSever.h"textSever::textSever(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);// 初始化 uiui.sIP->setText("127.0.0.1");ui.sPort->setText("9999");// 初始化套接字severSocket = new QTcpServer(this);// 监听套接字 监听本地severSocket->listen(QHostAddress(ui.sIP->text()), ui.sPort->text().toInt());// 当有新的连接的时候会触发 newConnection 信号connect(severSocket, &QTcpServer::newConnection, this, &textSever::new_connect);
}textSever::~textSever()
{}void textSever::new_connect() {// 有点像客户端的套接字 accept// 连接客户端clientSocket = severSocket->nextPendingConnection();// ui.record->append("有新的连接。。。。。");在vs中会有乱码ui.record->append(QString::fromLocal8Bit("有新的连接。。。。。"));// 当客户端有消息发送过来的时候,就会触发 readyRead 信号connect(clientSocket, &QTcpSocket::readyRead, this, &textSever::rev_mag);// 点击按钮,向客户端发送数据connect(ui.sendBtn, &QPushButton::clicked, this, &textSever::send_mag);
}void textSever::rev_mag()
{// 接收数据QByteArray array = clientSocket->readAll();ui.record->append(array);
}void textSever::send_mag()
{//发送数据clientSocket->write(ui.msg->toPlainText().toUtf8().data());ui.record->append("Me Say: " + ui.msg->toPlainText());// 清除发送框的消息ui.msg->clear();
}
textClient.h
#pragma once#include <QMainWindow>
#include "ui_textClient.h"
#include <QTcpSocket.h>
#include <QHostAddress.h>class textClient : public QMainWindow
{Q_OBJECTpublic:textClient(QWidget *parent = nullptr);~textClient();signals:public slots:void rev_mag();// 接收发送过来的消息void send_mag();// 发送消息private:Ui::textClientClass ui;QTcpSocket* clientSocket;
};
textClient.cpp
#include "textClient.h"textClient::textClient(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);//初始化clientSocket = new QTcpSocket(this);// 初始化 uiui.sIP->setText("127.0.0.1");ui.sPort->setText("9999");//连接服务器 这个是非阻塞方式,连接不上也不管clientSocket->connectToHost(QHostAddress(ui.sIP->text()), ui.sPort->text().toInt());// 接收数据connect(clientSocket, &QTcpSocket::readyRead, this, &textClient::rev_mag);// 发送数据connect(ui.sendBtn, &QPushButton::clicked, this, &textClient::send_mag);}textClient::~textClient()
{}void textClient::rev_mag()
{QByteArray array = clientSocket->readAll();ui.record->append(array);
}void textClient::send_mag()
{clientSocket->write(ui.msg->toPlainText().toUtf8().data());ui.record->append("my say :" + ui.msg->toPlainText());ui.msg->clear();
}
main.cpp
#include "textSever.h"
#include "textClient.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{//对于按钮文字显示不全的解决方法,必须放在main中的第一行QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QApplication a(argc, argv);textSever w;w.setWindowTitle(QString::fromLocal8Bit("服务器"));w.show();textClient c;c.setWindowTitle(QString::fromLocal8Bit("客户端"));c.show();return a.exec();
}相关文章:
QT中TCP的学习
文章目录 qt中TCP的实现 qt中TCP的实现 学习视频 QT中可以通过TCP协议让服务器和客户端之间行通信。服务器和客户端的具体流程 下方的信号都是系统提供的,我们只需要写相应的槽函数 A、服务器: 创建QTcpServer对象启动服务器(监听&…...
编译选项与常用环境变量
一、编译选项与常用环境变量 1、命令选项 -D 相当于就是定义,-D 可以理解为告诉cmake 后边我要定义一些参数,每定义一个就在前边加上-D就可以了,示例: #!/bin/shcmake -DTEST_DEBUGON . cmake --build .2、编译选项 下面列出来的…...
【SpringBoot2】SpringBoot开发实用篇
SpringBoot开发实用篇 KF-1.热部署 什么是热部署?简单说就是你程序改了,现在要重新启动服务器,嫌麻烦?不用重启,服务器会自己悄悄的把更新后的程序给重新加载一遍,这就是热部署。 热部署的功能是如…...
接口自动化测试框架搭建全部过程
思想: 1、基本目录的搭建 report:静态输出目录(报告或者日志) data:静态输入目录(可以存放Excel数据,被读取的一些数据) utils:实用方法层(这里存放的是项目的公共方法,一般拿到别…...
SQL学习(十)--DML_多表查询(针对数据表记录的join查询、子查询的操作)
目录 1. 多表查询 -- 内连接查询 1.1 显示内连接 1.2 隐式内连接 2. 多表连接 -- 外连接查询...
Docker容器部署
Docker容器部署 为什么使用Docker什么是Docker类比用途 Docker基于Windows集成IDEA在window上安装docker设置Docker配置IDEA连接Docker测试启动SpringBoot应用测试 Docker基于Linux集成IDEA连接宿主机redis服务连接Docker中redis服务 为什么使用Docker 在和前端联调的过程中&a…...
26岁转行网络安全,成功上岸安全开发!
前言 我是去年 9 月 22 日才正式学习网络安全的,之前在国营单位工作了 4 年,在长沙一个月工资只有 5000 块,而且看不到任何晋升的希望,如果想要往上走,那背后就一定要有关系才行。 而且国营单位的气氛是你干的多了&a…...
涨点技巧: 谷歌强势推出优化器Lion,引入到Yolov8,内存更小、效率更高,秒杀Adam(W)
1.Lion优化器介绍 论文:https://arxiv.org/abs/2302.06675 代码:automl/lion at master google/automl GitHub 1.1 简单、内存高效、运行速度更快 1)与 AdamW 和各种自适应优化器需要同时保存一阶和二阶矩相比,Lion 只需要动量,将额外的内存占用减半; 2)由于 Lion…...
5年测试经验,自动化都不会?月薪11K都难拿....
我接触了太多测试同行,由于多数同行之前一直做手工测试,现在很迫切希望做自动化测试,其中不乏工作5年以上的同行。 我从事软件自动化测试已经近十年,接触过底层服务端、API 、Web、APP、H5 等等,对自动化算是比较了解…...
低代码平台名声臭,用起来却真香——60%开发者不敢承认
群体盲从意识会淹没个体的理性,个体一旦将自己归入该群体,其原本独立的理性就会被群体的无知疯狂所淹没。——《乌合之众》 不知道从什么时候开始,“低代码不行”的论调充斥着整个互联网圈子,csdn、掘金、知乎、B站、脉脉……到处…...
PHP 的代码简洁之道(Clean Code PHP)
介绍 Robert C.Martin’s 的 软件工程师准则 Clean Code 同样适用于 PHP。它并不是一个编码风格指南,它指导我们用 PHP 写出具有可读性,可复用性且可分解的代码。 并非所有的准则都必须严格遵守,甚至一些已经成为普遍的约定。这仅仅作为指导方…...
delphi在两个窗口间用消息通讯
用SendMessage在窗口间通讯: 发送方 var HWD: THandle; str1,str2:string; sData: TCopyDataStruct; begin HWD:FindWindow(nil,pchar(aaaaaa)); // Integer(pchar(self.Edit2.Text)) str2:我来了中玉人; str1:我来了中玉人; sData.cbDa…...
如何高效提高倾斜摄影三维模型顶层合并的技术方法分析
如何高效提高倾斜摄影三维模型顶层合并的技术方法分析 1、倾斜摄影三维模型顶层合并 1.1倾斜摄影三维模型是一种基于倾斜摄影技术,通过多个角度拍摄同一区域的影像,利用计算机图像处理和三维重建技术生成的三维地理信息数据。由于一个大区域可能需要多块…...
【科普】PCB为什么常用50Ω阻抗?6大原因
在PCB设计中,阻抗通常是指传输线的特性阻抗,这是电磁波在导线中传输时的特性阻抗,与导线的几何形状、介质材料和导线周围环境等因素有关。 对于一般的高速数字信号传输和RF电路,50Ω是一个常用的阻抗值。 为什么是50Ω?…...
Linux嵌入式uboot使用tftp网络启动加载zImage、设备树
文章目录 一、前言二、Linux U-boot 相关命令(1)help 命令(2)printenv 命令(3)setenv 函数(4)saveenv 函数 三、tftp启动linux内核步骤(1)进入u-boot模式&…...
使用Serv-U搭建FTP服务器并公网访问【内网穿透】
文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 科技日益发展的今天,移动电子设备似乎成了我们生活的主角,智能…...
后端大厂面试总结大全六
目录: 1、Transactional注解控制事务有哪些不生效的场景2、MySQL的优化 1、Transactional注解控制事务有哪些不生效的场景 数据库引擎不支持事务数据源没有配置事务管理器没有被spring管理方法不是public的同一个类中方法调用,导致Transactional失效 举…...
2023五一数学建模A题B题C题思路模型代码
占个位置吧,开始在本帖实时更新五一数学建模赛题思路代码,文章末尾获取! 持续为更新参考思路 赛题思路 会持续进行思路模型分析,下自行获取。 A题思路: (比赛开始后第一时间更新) B题思路…...
Redis --- 入门、数据类型
一、前言 1.1、什么是Redis Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务」。 基于内存存储,读写性能高适合存储热点…...
超级详解MySQL执行计划explain
1、什么是MySQL执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解。 MySQL本身的功能架构分为三个部分,分别是 应用层、逻辑层、物理层,不只是MySQL ,其他大多数数据库产品都是按这种架构…...
OpCore-Simplify终极指南:如何快速构建完美的OpenCore EFI配置
OpCore-Simplify终极指南:如何快速构建完美的OpenCore EFI配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的Hackintosh配置…...
百川2-13B-4bits开源模型GPU算力适配:验证在RTX 4090D上支持max_new_tokens=2048
百川2-13B-4bits开源模型GPU算力适配:验证在RTX 4090D上支持max_new_tokens2048 1. 引言:当大模型遇上消费级显卡 如果你手头有一块RTX 4090D显卡,可能会好奇:它能流畅运行多大的语言模型?能生成多长的文本ÿ…...
Qwen3-1.7B效果实测:轻量级模型也能写出高质量文案和代码
Qwen3-1.7B效果实测:轻量级模型也能写出高质量文案和代码 1. 开篇:小身材,大能量 你可能听过很多关于大模型的讨论,动辄几百亿、上千亿参数,听起来很厉害,但部署起来也让人头疼——需要昂贵的显卡&#x…...
终极VSCode Blade格式化器高级技巧:自定义HTML属性排序与组件前缀配置指南
终极VSCode Blade格式化器高级技巧:自定义HTML属性排序与组件前缀配置指南 【免费下载链接】vscode-blade-formatter An opinionated Blade file formatter for VSCode 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-blade-formatter vscode-blade-fo…...
Ice终极指南:3步打造Mac菜单栏的清爽工作空间
Ice终极指南:3步打造Mac菜单栏的清爽工作空间 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice Ice是一款专为macOS设计的强大菜单栏管理器,能够帮助用户有效整理和优化混乱的菜…...
AI图像放大神器Upscayl:告别模糊时代的终极解决方案
AI图像放大神器Upscayl:告别模糊时代的终极解决方案 【免费下载链接】upscayl 🆙 Upscayl - Free and Open Source AI Image Upscaler for Linux, MacOS and Windows built with Linux-First philosophy. 项目地址: https://gitcode.com/GitHub_Trendi…...
Java基于微信小程序的学生签到系统,附源码+文档说明
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
别再手动开FDTD了!用Matlab这行代码一键启动Lumerical 2022(附完整配置流程)
用Matlab自动化操控Lumerical FDTD的工程实践指南 在光学仿真领域,Lumerical FDTD Solutions是纳米光子器件设计的黄金标准工具,而Matlab则是算法开发和数据分析的利器。传统工作流中,工程师需要在这两个软件间反复切换、手动操作,…...
Vue3-DateTime-Picker:如何构建现代化的Vue 3日期时间选择器解决方案?
Vue3-DateTime-Picker:如何构建现代化的Vue 3日期时间选择器解决方案? 【免费下载链接】vue3-date-time-picker Datepicker component for Vue 3 项目地址: https://gitcode.com/gh_mirrors/vu/vue3-date-time-picker Vue3-DateTime-Picker作为基…...
智能排障:借助快马AI构建Vivado安装问题自动诊断与修复助手
作为一名FPGA开发者,Vivado安装过程中的各种报错简直是家常便饭。每次遇到新问题都要花大量时间搜索解决方案,效率实在太低。最近尝试用InsCode(快马)平台的AI能力搭建了一个智能诊断工具,效果出乎意料的好,分享下具体实现思路。 …...
