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

QT中TCP的学习

文章目录

  • qt中TCP的实现

qt中TCP的实现

  • 学习视频

  • QT中可以通过TCP协议让服务器和客户端之间行通信。服务器和客户端的具体流程
    在这里插入图片描述

  • 下方的信号都是系统提供的,我们只需要写相应的槽函数

A、服务器:

  1. 创建QTcpServer对象
  2. 启动服务器(监听)调用成员方法listen(QHostAddress::Any,端口号)
  3. 当有客户端链接时候会发送newConnection()信号,触发自定义槽函数接受链接(使用nextPendingConnection() 与客户端建立连接,得到一个与客户端通信的套接字QTcpSocket)
  4. QTcpsocket发送数据用成员方法write
  5. 读数据当客户端有数据来,QTcpSocket对象就会发送readyRead()信号,触发自定义槽函数读取数据

B、客户端 :

  1. 创建QTcpSocket对象
  2. 链接服务器connectToHost(QHostAddress("ip"),端口号)
  3. QTcpsocket发送数据用成员方法write
  4. 读数据当对方有数据来,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协议让服务器和客户端之间行通信。服务器和客户端的具体流程 下方的信号都是系统提供的&#xff0c;我们只需要写相应的槽函数 A、服务器&#xff1a; 创建QTcpServer对象启动服务器&#xff08;监听&…...

编译选项与常用环境变量

一、编译选项与常用环境变量 1、命令选项 -D 相当于就是定义&#xff0c;-D 可以理解为告诉cmake 后边我要定义一些参数&#xff0c;每定义一个就在前边加上-D就可以了&#xff0c;示例&#xff1a; #!/bin/shcmake -DTEST_DEBUGON . cmake --build .2、编译选项 下面列出来的…...

【SpringBoot2】SpringBoot开发实用篇

SpringBoot开发实用篇 KF-1.热部署 ​ 什么是热部署&#xff1f;简单说就是你程序改了&#xff0c;现在要重新启动服务器&#xff0c;嫌麻烦&#xff1f;不用重启&#xff0c;服务器会自己悄悄的把更新后的程序给重新加载一遍&#xff0c;这就是热部署。 ​ 热部署的功能是如…...

接口自动化测试框架搭建全部过程

思想&#xff1a; 1、基本目录的搭建 report:静态输出目录(报告或者日志) data&#xff1a;静态输入目录(可以存放Excel数据&#xff0c;被读取的一些数据) utils:实用方法层(这里存放的是项目的公共方法&#xff0c;一般拿到别…...

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 日才正式学习网络安全的&#xff0c;之前在国营单位工作了 4 年&#xff0c;在长沙一个月工资只有 5000 块&#xff0c;而且看不到任何晋升的希望&#xff0c;如果想要往上走&#xff0c;那背后就一定要有关系才行。 而且国营单位的气氛是你干的多了&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都难拿....

我接触了太多测试同行&#xff0c;由于多数同行之前一直做手工测试&#xff0c;现在很迫切希望做自动化测试&#xff0c;其中不乏工作5年以上的同行。 我从事软件自动化测试已经近十年&#xff0c;接触过底层服务端、API 、Web、APP、H5 等等&#xff0c;对自动化算是比较了解…...

低代码平台名声臭,用起来却真香——60%开发者不敢承认

群体盲从意识会淹没个体的理性&#xff0c;个体一旦将自己归入该群体&#xff0c;其原本独立的理性就会被群体的无知疯狂所淹没。——《乌合之众》 不知道从什么时候开始&#xff0c;“低代码不行”的论调充斥着整个互联网圈子&#xff0c;csdn、掘金、知乎、B站、脉脉……到处…...

PHP 的代码简洁之道(Clean Code PHP)

介绍 Robert C.Martin’s 的 软件工程师准则 Clean Code 同样适用于 PHP。它并不是一个编码风格指南&#xff0c;它指导我们用 PHP 写出具有可读性&#xff0c;可复用性且可分解的代码。 并非所有的准则都必须严格遵守&#xff0c;甚至一些已经成为普遍的约定。这仅仅作为指导方…...

delphi在两个窗口间用消息通讯

用SendMessage在窗口间通讯&#xff1a; 发送方 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倾斜摄影三维模型是一种基于倾斜摄影技术&#xff0c;通过多个角度拍摄同一区域的影像&#xff0c;利用计算机图像处理和三维重建技术生成的三维地理信息数据。由于一个大区域可能需要多块…...

【科普】PCB为什么常用50Ω阻抗?6大原因

在PCB设计中&#xff0c;阻抗通常是指传输线的特性阻抗&#xff0c;这是电磁波在导线中传输时的特性阻抗&#xff0c;与导线的几何形状、介质材料和导线周围环境等因素有关。 对于一般的高速数字信号传输和RF电路&#xff0c;50Ω是一个常用的阻抗值。 为什么是50Ω&#xff1f…...

Linux嵌入式uboot使用tftp网络启动加载zImage、设备树

文章目录 一、前言二、Linux U-boot 相关命令&#xff08;1&#xff09;help 命令&#xff08;2&#xff09;printenv 命令&#xff08;3&#xff09;setenv 函数&#xff08;4&#xff09;saveenv 函数 三、tftp启动linux内核步骤&#xff08;1&#xff09;进入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. 前言 科技日益发展的今天&#xff0c;移动电子设备似乎成了我们生活的主角&#xff0c;智能…...

后端大厂面试总结大全六

目录&#xff1a; 1、Transactional注解控制事务有哪些不生效的场景2、MySQL的优化 1、Transactional注解控制事务有哪些不生效的场景 数据库引擎不支持事务数据源没有配置事务管理器没有被spring管理方法不是public的同一个类中方法调用&#xff0c;导致Transactional失效 举…...

2023五一数学建模A题B题C题思路模型代码

占个位置吧&#xff0c;开始在本帖实时更新五一数学建模赛题思路代码&#xff0c;文章末尾获取&#xff01; 持续为更新参考思路 赛题思路 会持续进行思路模型分析&#xff0c;下自行获取。 A题思路&#xff1a; &#xff08;比赛开始后第一时间更新&#xff09; B题思路…...

Redis --- 入门、数据类型

一、前言 1.1、什么是Redis Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件&#xff0c;它是「Remote Dictionary Service」的首字母缩写&#xff0c;也就是「远程字典服务」。 基于内存存储&#xff0c;读写性能高适合存储热点…...

超级详解MySQL执行计划explain

1、什么是MySQL执行计划 要对执行计划有个比较好的理解&#xff0c;需要先对MySQL的基础结构及查询基本原理有简单的了解。 MySQL本身的功能架构分为三个部分&#xff0c;分别是 应用层、逻辑层、物理层&#xff0c;不只是MySQL &#xff0c;其他大多数数据库产品都是按这种架构…...

Hotkey Detective:Windows热键冲突终极解决方案,快速定位“按键劫持“元凶

Hotkey Detective&#xff1a;Windows热键冲突终极解决方案&#xff0c;快速定位"按键劫持"元凶 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mir…...

如何高效使用空洞骑士Scarab模组管理器:专业级配置实战教程

如何高效使用空洞骑士Scarab模组管理器&#xff1a;专业级配置实战教程 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab Scarab是一款专为《空洞骑士》玩家设计的专业级模组管…...

手机短剧拉片软件2026推荐,助力高效内容分析

手机短剧拉片软件2026推荐&#xff0c;助力高效内容分析在当今的影视行业中&#xff0c;手机短剧以其短小精悍、节奏紧凑的特点受到了广大观众的喜爱。对于创作者来说&#xff0c;如何深入分析这些短剧&#xff0c;学习其中的创作技巧&#xff0c;成为了提升自身水平的关键。据…...

数据库角色管理(Role Management)

1.1、角色基础角色是权限的集合&#xff0c;是 Oracle 权限管理的核心机制。12c 增强了角色的安全特性。创建角色&#xff1a;CREATE ROLE app_developer;创建带密码的角色&#xff08;需激活时提供密码&#xff09;&#xff1a;CREATE ROLE sensitive_role IDENTIFIED BY &quo…...

Polymarket预测市场模拟交易工具:零风险学习链上金融衍生品

1. 项目概述与核心价值最近在研究链上预测市场&#xff0c;发现一个挺有意思的开源项目&#xff1a;jchimbor/polymarket-paper-trader。简单来说&#xff0c;这是一个针对Polymarket预测市场的“模拟交易”或“纸面交易”工具。Polymarket本身是一个基于Polygon链的去中心化预…...

Python-ADB协议实现原理:深入理解ADB和Fastboot通信机制

Python-ADB协议实现原理&#xff1a;深入理解ADB和Fastboot通信机制 【免费下载链接】python-adb Python ADB Fastboot implementation 项目地址: https://gitcode.com/gh_mirrors/py/python-adb Python-ADB是一个强大的开源项目&#xff0c;提供了ADB&#xff08;Andr…...

线程相关知识

线程是进程内的一条独立执行流&#xff0c;是操作系统调度 CPU 的最小单位&#xff0c;共享进程的地址空间与资源&#xff0c;有自己独立的栈、寄存器、程序计数器。一、核心本质拆解1.从属关系 进程是资源分配最小单位&#xff08;内存、文件、句柄&#xff09;&#xff1b; 线…...

AI应用成本监控实战:基于令牌预算的LLM API调用管理与优化

1. 项目概述与核心价值最近在折腾AI应用开发&#xff0c;特别是那些基于大语言模型API&#xff08;比如OpenAI、Anthropic、Claude等&#xff09;的项目时&#xff0c;有一个痛点越来越明显&#xff1a;成本控制。你写了个聊天机器人&#xff0c;或者搞了个自动摘要工具&#x…...

为防数据泄露!教你拆除2024款RAV4混动汽车调制解调器和GPS

拆除2024款RAV4混动汽车调制解调器和GPS&#xff0c;从源头上阻止数据传输&#xff01;现代汽车就像装在轮子上的电脑&#xff0c;配备众多传感器&#xff0c;会回传位置、速度等遥测数据。其车内和车外摄像头、麦克风及调制解调器默认开启&#xff0c;且难关闭&#xff0c;数据…...

使用 Taotoken CLI 工具一键配置团队成员的开发环境

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用 Taotoken CLI 工具一键配置团队成员的开发环境 在团队开发中&#xff0c;统一管理大模型 API 的接入配置是一项常见且繁琐的任…...