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

【Qt网络编程】实现TCP协议通信

文章目录

  • 概要:本期主要讲解QT中对于TCP协议通信的实现。
  • 一、TCP协议
  • 二、Qt中TCP协议处理
    • 1.QTcpSocket
    • 2.QTcpServer
  • 三、Qt实现TCP通信
    • 1.客户端
    • 2.服务器端
  • 结尾

概要:本期主要讲解QT中对于TCP协议通信的实现。

一、TCP协议

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。
TCP建立连接前,需要进行三次握手,如下图所示:
在这里插入图片描述
TCP断开连接前,需要进行四次挥手,如下图所示:

在这里插入图片描述

二、Qt中TCP协议处理

Qt中提供了QTcpSocket类和QTcpServer类分别用于创建TCP套接字和TCP服务器套接字。

1.QTcpSocket

QTcpSocket类继承与QAbstractSocket,主要提供了socket套接字的创建、绑定端口、连接服务器等。
QAbstractSocket类

2.QTcpServer

QTcpServer类继承于QSctpServer,主要提供了对于TCP连接信号的响应和监听等。
QTcpServer

三、Qt实现TCP通信

1.客户端

客户端是发送端,主要实现与服务器端建立连接、发送数据。步骤如下:
建立TCP套接字 --> 连接服务器 --> 发送数据
下面是客户端的源码:

#ifndef TCPCLIENT_H
#define TCPCLIENT_H#include <QObject>
#include <QTcpSocket>
#include <QHostAddress>
#include <QDebug>
#include <QTimer>class TCPClient : QObject
{Q_OBJECT
public:TCPClient();void InitSocket();//初始化Socket套接字void InitTimer();//初始化定时器,定时发送void ConnectToServer();//连接服务器void SendData();//发送数据private:QTcpSocket *mTcpSocket;//Tcp连接套接字QHostAddress mServerAddress;//服务器IPQTimer *mTimer;//定时器对象};#endif // TCPCLIENT_H
#include "tcpclient.h"TCPClient::TCPClient()
{InitSocket();ConnectToServer();InitTimer();}void TCPClient::InitSocket()
{mTcpSocket = new QTcpSocket;//初始化Tcp连接套接字mServerAddress.setAddress("10.0.0.177");//设置服务器地址
}void TCPClient::InitTimer()
{mTimer = new QTimer;//初始化定时器对象connect(mTimer,&QTimer::timeout,this,[=]{SendData();});mTimer->start(1000);//每隔一秒发送一次数据
}void TCPClient::ConnectToServer()
{quint16 _port = 7777;//设置服务器端口connect(mTcpSocket,&QTcpSocket::connected,this,[=]{qDebug()<< "Connect To Server Successful!"<<endl;});mTcpSocket->connectToHost(mServerAddress,_port,QIODevice::WriteOnly);//连接服务器}void TCPClient::SendData()
{QByteArray _data = "hello";if(-1 != mTcpSocket->write(_data.data(),_data.length())){qDebug()<< "TCP ==> Send data : "<< _data<<endl;}mTcpSocket->flush();
}

2.服务器端

服务器端是接收端,主要实现监听连接信号,建立连接和接收数据。步骤如下:
建立监听套接字 --> 连接到客户端 --> 获得连接套接字 --> 接收数据
下面是服务器端源码:

#ifndef TCPSEVER_H
#define TCPSEVER_H#include <QObject>
#include <QHostAddress>
#include <QTcpServer>
#include <QTcpSocket>
#include <QDebug>class TCPSever : QObject
{Q_OBJECT
public:TCPSever();void InitServer();//初始化服务器
private:QTcpServer *mTcpServer;//服务器对象QTcpSocket *mTcpSocket;//客户端套接字QHostAddress mHostAddress;//本地IP地址};#endif // TCPSEVER_H
#include "tcpsever.h"TCPSever::TCPSever()
{InitServer();
}void TCPSever::InitServer()
{mTcpServer = new QTcpServer(this);//初始化监听套接字mTcpSocket = new QTcpSocket;//初始化连接套接字mHostAddress.setAddress("10.0.0.177");//设置监听网卡IPquint16 _port = 7777;//设置监听端口mTcpServer->listen(mHostAddress,_port);//监听指定网卡和端口qDebug()<<"Listen Interface ["<<mHostAddress.toString()<<"] And Port ["<<_port<<"] Successful!"<<endl;connect(mTcpServer,&QTcpServer::newConnection,this,[=]{mTcpSocket = mTcpServer->nextPendingConnection();//获取连接套接字qDebug()<<"Connect To Client Successful!"<<endl;connect(mTcpSocket,&QTcpSocket::readyRead,this,[=]{//读取消息QByteArray _data = mTcpSocket->readAll();qDebug()<<"TCP Receive Data : "<<QString::fromLatin1(_data)<<endl;});});}

结尾

以上就是QT中TCP通信模块的全部内容,然后上面的源码可以直接编,但是记得去PRO文件中加入network模块:)

相关文章:

【Qt网络编程】实现TCP协议通信

文章目录概要&#xff1a;本期主要讲解QT中对于TCP协议通信的实现。一、TCP协议二、Qt中TCP协议处理1.QTcpSocket2.QTcpServer三、Qt实现TCP通信1.客户端2.服务器端结尾概要&#xff1a;本期主要讲解QT中对于TCP协议通信的实现。 一、TCP协议 传输控制协议&#xff08;TCP&am…...

Webpack打包———处理样式资源

基本使用 本质上&#xff0c;webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部从一个或多个入口点构建一个 依赖图(dependency graph)&#xff0c;然后将你项目中所需的每一个模块组合成一个或多个 bundles&a…...

VP记录:Codeforces Round 857 (Div. 2) A~D

传送门:CF A题 Likes: 这道题的题意很变态,十分的难懂,简直就是一坨shit,这场比赛最后被骂是有原因的 简单来说就是对于一个项目,每一个人都能对此加一或者减一,最后问你这个项目每一时刻最大和最小是多少.题目中只说明了只能点赞后才能取消,并没有解释存在取消操作必存在点…...

Docker常用项目实战演练

docker镜像源的修改 linux环境下编辑 /etc/docker/daemon.json vi /etc/docker/daemon.json #如添加如下网易镜像源 { "registry-mirrors": ["http://hub-mirror.c.163.com"] }docker run命令详细解释 日常工作中用的比较多的是docker run命令&#xff…...

Linux进程间通信-FIFO命名管道

Linux进程间通信-FIFO命名管道 1、概述 管道因为没有名称&#xff0c;所以只用于进程间的亲缘通信。为了克服这一缺点&#xff0c;提出了命名管道(FIFO)&#xff0c;又称命名管道、FIFO文件。 FIFO不同于无名管道&#xff0c;它提供与之关联的路径名&#xff0c;该路径名以FIF…...

【Kafka】记录一次基于connect-mirror-maker做的Kafka集群迁移完整过程

文章目录背景环境工具选型实操MM1MM2以MM2集群运行以Standalone模式运行验证附录MM2配置表其他背景 一个测试环境的kafka集群&#xff0c;Topic有360&#xff0c;Partition有2000&#xff0c;部署在虚拟机上&#xff0c;由于多方面原因&#xff0c;要求迁移至k8s容器内&#x…...

实现VOC数据集与COCO数据集格式转换

实现VOC数据集与COCO数据集格式转换2、将voc数据集的xml转化为coco数据集的json格式2、COCO格式的json文件转化为VOC格式的xml文件3、将 txt 文件转换为 Pascal VOC 的 XML 格式<annotation><folder>文件夹目录</folder><filename>图片名.jpg</file…...

常用的密码算法有哪些?

我们将密码算法分为两大类。 对称密码&#xff08;密钥密码&#xff09;——算法只有一个密钥。如果多个参与者都知道该密钥&#xff0c;该密钥 也称为共享密钥。非对称密码&#xff08;公钥密码&#xff09;——参与者对密钥的可见性是非对称的。例如&#xff0c;一些参与者仅…...

SNS (Simple Notification Service)简介

SNS (Simple Notification Service) 是一种完全托管的发布/订阅消息收发和移动通知服务&#xff0c;用于协调向订阅终端节点和客户端的消息分发。 和SQS (Simple Queue Service)一样&#xff0c;SNS也可以轻松分离和扩展微服务&#xff0c;分布式系统和无服务应用程序&#xf…...

JVM初步理解浅析

一、JVM的位置 JVM的位置 JVM在操作系统的上一层&#xff0c;是运行在操作系统上的。JRE是运行环境&#xff0c;而JVM是包含在JRE中 二、JVM体系结构 垃圾回收主要在方法区和堆&#xff0c;所以”JVM调优“大部分也是发生在方法区和堆中 可以说调优就是发生在堆中&#xf…...

【巨人的肩膀】MySQL面试总结(一)

&#x1f4aa; 目录&#x1f4aa;1、什么是ER图2、数据库范式了解吗3、超键、候选键、主键、外键分别是什么&#xff1f;4、为什么不推荐使用外键与级联5、什么是存储过程6、drop、delete与truncate区别7、数据库设计通常分为那几步8、什么是关系型数据库9、什么是SQL10、MySQL…...

【数据结构之树】——什么是树,树的特点,树的相关概念和表示方法以及在实际的应用。

文章目录一、1.树是什么&#xff1f;2.树的特点二、树的相关概念三、树的表示方法1.常规方法表示树2.使用左孩子右兄弟表示法3. 使用顺序表来存储父亲节点的下标三、树在实际的应用总结一、1.树是什么&#xff1f; 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n&…...

JavaScript语法

文章目录一、JavaScript是什么&#xff1f;JavaScript引入方式二、基础语法书写语法输出语句变量数据类型运算符流程控制语句数组函数JS变量作用域对象一、JavaScript是什么&#xff1f; JavaScript&#xff1a;是一门跨平台的脚本语言&#xff0c;用来控制网页行为&#xff0…...

【BIOS/UEFI】HII 基本框架及概述

HII&#xff08;Human Interface Infrastructure &#xff09;定义了一套管理用户输入的基础框架。HII数据库主要提供用户安装、卸载以及使用各种字符串、字体和图片等资源的接口。 HID Devices 是用户输入设备&#xff0c;如键盘、串口和网络&#xff1b;Display Devices 是输…...

sprintf(...)溢出边界导致程序崩溃的问题

文章目录小结问题及解决参考小结 使用sprintf(...)进行格式化是一种标准的做法&#xff0c;但是这样做是有一个极大的风险&#xff0c;由于sprintf(...)不进行边界检查&#xff0c;这样会有写操作溢出边界的风险&#xff0c;并导致程序崩溃。本文进行了简单写操作溢出边界的测…...

公式推导+dfs简版

写在前面的话&#xff1a;心可以冷&#xff0c;但手不能停 第一题&#xff1a;C. Flexible String 题目大意&#xff1a;给一个aaa字符串和bbb字符串和数字kkk&#xff0c;首先设置一个计数器cntcntcnt,其中可以对aaa字符串做以下操作&#xff1a;替换aaa中的一个字母xxx&#…...

论文笔记 | 标准误聚类问题

关于标准误的选择&#xff0c;如是否选择稳健性标准误、是否采取聚类标准误。之前一直是困惑的&#xff0c;惯用的做法是类似主题的文献做法。所以这一次&#xff0c;借计量经济学课程之故&#xff0c;较深入学习了标准误的选择问题。 在开始之前推荐一个知乎博主。他阅读了很…...

银行管理系统--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

实例1&#xff1a;银行管理系统 从早期的钱庄到现如今的银行&#xff0c;金融行业在不断地变革&#xff1b;随着科技的发展、计算机的普及&#xff0c;计算机技术在金融行业得到了广泛的应用。银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列的功…...

【18】组合逻辑 - VL18 实现3-8译码器①

VL18 实现3-8译码器① 1 题目 【这题我的思路非常绝境】奈斯 !! 看真值表的思路:Yi所在列【0仅一个其余全1】,故【以0为对象求解】 观察发现:E3 E2_n E1_n = 100 时 是 译码的使能信号 ; 并且E3 E2_n E1_n为其他值时,都不使能译码 然后就很简单,没有仿真就成功了 2 代…...

2020蓝桥杯真题最长递增 C语言/C++

题目描述 在数列a_1 ,a_2,⋯,a_n 中&#xff0c;如果a_i <a_i1 <a_i2<⋯<a_j&#xff0c;则称 a_i至 a_j为一段递增序列&#xff0c;长度为 j−i1。 定一个数列&#xff0c;请问数列中最长的递增序列有多长。 输入描述 输入的第一行包含一个整数 n。 第二行包含…...

华为OD机试题 - 寻找连续区间(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:寻找连续区间题目输入输出示例一输入输出说明示例二输入输出Cod…...

一次疲惫的调试--累了及时透气

原创 射频清茶 深山小老虎 2023-03-11 14:32发表于广东 收录于合集 #射频调试3个 #网分4个 #Wi-Fi 2个 进来透透气 道不尽红尘舍恋 诉不完人间恩怨 世世代代都是缘 喝着相同的水 留着相同的血 这条路漫漫又长远 红花当然配绿叶 这一辈子谁来陪 渺渺茫茫来又回 往日情景再…...

综合练习7 摄氏度转华氏温度(“\t“的使用,循环语句)

综合练习7 摄氏度转华氏温度 使用do…while循环&#xff0c;在控制台输入摄氏温度与华氏温度的对照表。 对照表从摄氏温度-30℃到50℃&#xff0c;每行间隔10℃&#xff0c;运行如下&#xff1a; 摄氏温度&#xff1a;-30℃ 华氏温度&#xff1a;-22.0℉ 摄氏温度&#xff1a;…...

AWS数据库总结

RDS – 联机事务处理OLTP&#xff08;Online Transaction Processing&#xff09;&#xff0c;包括&#xff1a; SQL ServerOracleMySQL ServerPostgreSQLAuroraMariaDB非关系数据库DynamoDB数据仓库RedShift – 联机分析处理OLAP&#xff08;Online Analytics Processing&…...

2个步骤就能批量给视频添加滚动字幕

现在很多小伙伴在剪辑视频的时候都会给自己的视频添加适配的字幕&#xff0c;但是有很多的视频想要添加一样的滚动字幕时&#xff0c;有一个能批量添加剪辑的工具非常重要&#xff0c;今天小编就给大家分享一个可以批量剪辑大量视频的工具&#xff0c;下面一起看看具体的操作步…...

PHP 的运行方式有哪些?

PHP本质上的运行方式可以分为两种&#xff1a; 基于命令行的基于PHP-FPM的 但实际上&#xff0c;PHP能做的事很多&#xff0c;很多场景下&#xff0c;不同的运行方式能让开发更方便&#xff0c;减轻各种工作。 测试开发 PHP内置了一个HTTP 的server。这意味着&#xff0c;很…...

Web学习3_JavaScript

1.1 JS的调用方式与执行顺序 使用方式 HTML页面中的任意位置加上<script type"module"></script>标签即可。 常见使用方式有以下几种&#xff1a; 直接在<script type"module"></script>标签内写JS代码。script type"modu…...

「MySQL基础」不可重复读和幻读的区别

「MySQL基础」不可重复读和幻读的区别 文章参考&#xff1a; 在数据库中不可重复读和幻读到底应该怎么分&#xff1f; 作者&#xff1a;暖猫Suki、普通熊猫 文章目录「MySQL基础」不可重复读和幻读的区别一、概述二、小结一、概述 正好在琢磨这个问题&#xff0c;也被搞得头昏…...

CorelDRAW2023最新版新增功能200多个新模板

CorelDRAW是一款平面矢量绘图排版软件&#xff0c;CorelDRAW运用涵盖企业VI设计&#xff0c;广告设计&#xff0c;包装设计&#xff0c;画册设计&#xff0c;海报、招贴设计&#xff0c;UI界面设计&#xff0c;网页设计&#xff0c;书籍装帧设计&#xff0c;插画设计&#xff0…...

springboot自定义日志以及行号正确展示

在开发springboot项目时&#xff0c;我们可能需要自定义日志实现。需要对slf4j的日志实现进行一次外层包装 这个很简单&#xff0c;按照org.slf4j.Logger方式定义一个类Logger类MyLogger。 让后实现MyLoggerImpl&#xff1a; public class MyLoggerImpl implements CoreLogge…...

网站建设的步骤图/中国最新消息今天

这篇文章也是基于知乎的一个答案。因为前天蛋疼写了个99行蛋疼版2048&#xff0c;所以一时兴起在知乎上搜了搜2048&#xff0c;结果发现了这个问题。看了看&#xff0c;票数最高的两个答案都是错的&#xff0c;所以自己推导了一下。2048的玩法就不赘述了&#xff0c;先来看看相…...

wordpress加入HTML失败/营销技巧有哪些

匿名用户 1级 2018-09-11 回答 Java和python犹如北乔峰南慕容&#xff0c;竞争不相上下。如果有能力同时学习那再好不过了&#xff0c;但很多刚刚接触IT行业的小伙伴在学习初期学习困难较大&#xff0c;还是要两者择其优。 下面是python和Java两个编程语言的对比分析&#xff0…...

全国统一信息查询平台/济南网站优化培训

返回Web Essentials功能目录 本篇目录 功能快捷方式WEIgnore功能 通用功能应用于很多方面。 设置 所有的设置都可以在VS选择工具 -> 选项 -> Web Essentials中找到: 解决方案作用域设置 设置可以是全局的或者针对某些特定的解决方案。通过单独解决方案作用域设置&#xf…...

destoon做众筹网站/设计网站都有哪些

我很惊讶你想用程序设计杂志封面&#xff0c;而不是像Photoshop、Illustrator、Gimp或Inkscape这样的GUI。但是&#xff0c;假设您这样做&#xff0c;我认为最简单的方法是使用Python构造SVG图像。SVG是基于向量的(行位置在生成之后可以修改)和人类可读的XML&#xff0c;因此您…...

怎么做微信钓鱼网站吗/重庆自动seo

在计算机应用软件高度发达的今天&#xff0c;其作用几乎覆盖了日常企业运作的细致末节&#xff0c;为人们的高效办公提供了强力的支撑作用&#xff0c;比如&#xff1a;OA系统、CRM系统、各种业务系统、财务软件等。掌握应用软件系统的使用已经成为每一个在职人员的必备技能&am…...

网站的站长是什么意思/山西seo顾问

写过PHP的都知道&#xff0c;其有个extract()非常方便&#xff0c;可以便捷的将字典转换为变量&#xff0c;当然到ASP中则要受限很多&#xff0c;特别是VBScript脚本&#xff0c;本文叙述的就是一种转换的思路&#xff0c;可以实现类似的功能。下面我就直接提供ASP版本的extrac…...