c++Qt网络操作

1、基础概念

1.1 TCP/UDP

  • TCP

是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、

数据无失序、数据无重复到达的通信)

适用情况:

1.SN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议

2、适合于对传输质量要求较高,以及传输大量数据的通信。

高可靠的原因:

  1. 三次握手,四次挥手
  2. 序列号和应答号机制
  3. 超时/错误 重传机制

UDP(User Datagram Protocol)用户数据报文协议,是不可靠的无连接的协议。

在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

即时性

1、发送小尺寸数据(如对DNS服务器进行IP地址查询时)

2、QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议

3、流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输

1.2 IP地址与端口号

IP地址:

1、IP地址是internet中的主机标识

 2、internet中的主机要与别的机器通信必须具有一个IP地址

 3、IP地址为32位(IPv4)或者128位(IPv6)

 4、表示形式:常用点分形式,如202.38.64.10,最后都会转换为一个32位的无符号整数。

 五类:A B C D E

端口号

1、为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区分。

2、TCP端口号与UDP端口号独立。

3、端口用两个字节来表示:2byte

4、众所周知端口:1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用)

已登记端口:1024~49151(选1000以上,10000以下)

动态或私有端口:49152~65535 --固定某些服务使用-

非豹子号端口号,本次授课使用8887端口号

2、准备工作

与数据库编程一样,Qt的网络功能需要在.pro项目配置文件中添加对应模块。network模块。

网络通信当中主要用到两个类:

  • QTcpServer

表示一个基于TCP的服务器,需要注意的是,此类直接继承了QObject类,不继承QIODevice类,因此不具备任何IO能力。

  • QTcpSocket

表示一个基于TCP的Socket连接,间接继承了QIODevice类,因此使用此类对象进行IO读写。

3、相关函数

// 构造函数,堆内存开辟
QTcpServer:: QTcpServer(QObject * parent = 0)

// 开启监听服务,等待客户端发起连接
// 参数1:监听来源(那个网段的ip地址),默认值不加任何限制
// 参数2:服务器所占用的端口号。默认值0表示随机选取
bool QTcpServer:: listen(const QHostAddress & address = QHostAddress::Any, quint16 port = 0)

// 查看当前是否在监听
bool QTcpServer:: isListening() const

// 关闭监听服务
void QTcpServer:: close()

编写客户端:

// 构造函数 堆区创建
QTcpSocket:: QTcpSocket(QObject * parent = 0)

// 连接到服务器
// 参数1:服务器的IP地址
// 参数2:服务器的端口号
// 参数3:打开模式
void QAbstractSocket:: connectToHost(const QString & hostName, quint16 port, OpenMode openMode = ReadWrite)[virtual]

// 每当有新的连接可用是,就会发射此信号
void QTcpServer:: newConnection() [signal]

// 返回与哭护短连接的QTcpSocket对象
QTcpSocket * QTcpServer:: nextPendingConnection()

// 获取对面(客户端)的IP地址
// 返回值为IP地址封装类
QHostAddress QAbstractSocket:: peerAddress() const

// 返回值对面的(客户端)端口号
quint16 QAbstractSocket:: peerPort() const

// 构造函数
// 参数是Qt的读写类,可以使QFile、也可以是QTcpSocket.......
QTextStream:: QTextStream(QIODevice * device)

// 输出字符串内容,支持链式调用
QTextStream &	operator<<(const QString & string)

// 有数据可读时发射
void QIODevice:: readyRead() [signal]

// 读取数据,参数为本次读取数据最大长度,返回值为读取的字符串。
QString QTextStream:: read(qint64 maxlen)

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

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

相关文章

【STM32 CubeMX】串口编程DMA

文章目录 前言一、DMA方式1.1 DMA是什么1.2 CubeMX配置DMA1.3 DMA方式函数使用DMA的发送接收函数 总结 前言 在嵌入式系统中&#xff0c;串口通信是一项至关重要的功能&#xff0c;它允许单片机与外部设备进行数据交换&#xff0c;如传感器、显示器或其他设备。然而&#xff0…

Linux笔记之xhost +和docker的关系以及GDK_SCALE和GDK_DPI_SCALE详解

Linux笔记之xhost 和docker的关系以及GDK_SCALE和GDK_DPI_SCALE详解 ——2024-02-11 code review! 文章目录 Linux笔记之xhost 和docker的关系以及GDK_SCALE和GDK_DPI_SCALE详解xhost 的作用xhost 与 Docker 的关系 -e GDK_SCALE 和 -e GDK_DPI_SCALE详解GDK_SCALEGDK_DPI_SC…

【使用IntelliJ IDEA 配置Maven入门——详细讲解】

使用IntelliJ IDEA 配置Maven 1. 介绍2. 安装 Maven&#xff08;如果你的系统尚未安装&#xff09;3. 在 IntelliJ IDEA 中配置 Maven4. 创建/导入 Maven 项目5. 编译和运行 Maven 项目6. 提示 1. 介绍 IntelliJ IDEA 是一个广受欢迎的Java集成开发环境&#xff08;IDE&#x…

【Linux】进程的初步认识

进程的初步认识 基本概念描述进程task_struct-PCB的一种task_stuct内容分类 查看进程通过系统调用获取进程标识符 基本概念 要了解进程&#xff0c;首先我们要知道两点 我们可以同时启动多个程序&#xff0c;也就意味着我们可以将多个.exe文件加载到内存操作系统如何去管理这些…

Resolving Low-Level Graphics Issues

Resolving Low-Level Graphics Issues 在远程操作其他工作站上的matlab的时候&#xff0c;无法显示仿真结果&#xff0c;但是在真实的工作站上操作的话又可以看到simulation的结果&#xff0c;并且远程的时候进行仿真&#xff0c;就会显示以下的错误提示&#xff1a; >>…

036-安全开发-JavaEE应用第三方组件Log4j日志FastJson序列化JNDI注入

036-安全开发-JavaEE应用&第三方组件&Log4j日志&FastJson序列化&JNDI注入 #知识点&#xff1a; 1、JavaEE-组件安全-Log4j 2、JavaEE-组件安全-Fastjson 3、JavaEE-基本了解-JNDI-API 演示案例&#xff1a; ➢Java-三方组件-Log4J&JNDI ➢Java-三方组件-Fa…

OpenAI全新发布文生视频模型Sora - 现实,不存在了

OpenAI&#xff0c;发他们的文生视频大模型&#xff0c;Sora了。。。。。 而且&#xff0c;是强到&#xff0c;能震惊我一万年的程度。。。 https://openai.com/sora 如果非要用三个词来总结Sora&#xff0c;那就是“60s超长长度”、“单视频多角度镜头”和“世界模型” &am…

Codeforces Round 926 (Div. 2)(A,B,C,D,E,F)

这场还是很有含金量的&#xff0c;B题开始就有难度了&#xff0c;B是个推结论的题&#xff0c;C要推结论然后递推&#xff0c;D题是有点难的树上DP&#xff08;主要是状态转移方程不好写&#xff09;&#xff0c;E题是个二进制预处理然后状压DP&#xff0c;F题是个数论&#xf…

力扣代码学习日记三

Problem: 242. 有效的字母异位词 文章目录 思路解题方法复杂度代码 思路 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s…

写一个程序,输入数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数输入-1表示结束

#include <stdio.h> int main(void) {int x;int count[10];int i;for(i0;i<10;i){//初始化数组 count[i]0;}scanf("%d",&x);while(x!-1){if( x>0 && x<9){count[x];//数组参与运算 }scanf("%d",&x);}for(i0;i<10;i){pr…

coding持续集成构建环境自定义node版本

coding持续集成构建环境自定义node版本 解决方案 只需要在构建计划的编写过程中增加一个如下的 stage&#xff0c;具体 nodejs 版本下载地址可参考 https://nodejs.org/en/download/releases/ 这里。 stage(toggle Node.js version) {steps {sh rm -rf /usr/lib/node_modules…

车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总

车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,…

【前端工程化面试题】简单说一下 vite 的构建流程

首先需要知道 vite 的原理&#xff0c;请参考这篇文章。 vite 的构建流程一般是指的开发过程中的流程&#xff1a; 启动开发服务器&#xff1a;运行 vite 命令&#xff0c;启动开发服务器&#xff0c;在开发期间 vite 是一个服务器解析入口模块&#xff1a;在开发阶段 vite 的…

安装 Windows Server 2003

1.镜像安装 镜像安装:Windows Server 2003 2.安装过程(直接以图的形式呈现) 按Enter(继续),继续后F8继续 直接Enter安装 下一步 秘钥:GM34K-RCRKY-CRY4R-TMCMW-DMDHM 等待安装成功即可

JavaWeb

一、技术栈 【1】 前端部分 HTML CSS JavaScript ES6 Nodejs npm vite vue3 router pinia axios element-plus … 【2】 后端部分 HTTP xml Tomcat Servlet Request Response Cookie Sesssion Filter Listener MySQL JDBC Druid Jackson lombok jwt … 二、JAVAWEB交互模…

利用Excel模拟投币试验

文章目录 试验前对Excel要进行的设置试验步骤计算正面频率结果图试验前对Excel要进行的设置 进入Excel依次点击如下选项,最后将分析工具库勾选 #mermaid-svg-bIvrxZGI9buCMW6U {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#m…

Leetcode-682.棒球比赛

题目&#xff1a; 你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成&#xff0c;过去几回合的得分可能会影响以后几回合的得分。 比赛开始时&#xff0c;记录是空白的。你会得到一个记录操作的字符串列表 ops&#xff0c;其中 ops[i] 是你需要记录的第 i 项操…

【知识整理】产研中心岗位评定标准之大数据岗位

为贯彻执行集团数字化转型的需要,该知识库将公示集团组织内各产研团队不同角色成员的职务“职级”岗位的评定标准; 一、定级定档目的 通过对公司现有岗位及相应岗位员工的工作能力、工作水平进行客观公正评定,确定各岗位的等级及同等级岗位员工对应的档级,从而为员工以后的晋升…

三种输入输出函数

目录 printf函数 scanf函数 getchar函数 putchar函数 gets函数 puts函数 printf函数 当你需要将数据或文本输出到屏幕或其他输出设备时&#xff0c;C语言提供了一个非常有用的函数&#xff0c;即 printf() 函数。它是标准库中定义的函数&#xff0c;用于格式化输出。 pr…

【Linux】指令 【whereis】

whereis是一个用于查找特定文件在文件系统中的位置的命令。 主要查找二进制文件或帮助文件&#xff0c;适用于那些不属于常规文件系统的特殊文件。 查找ping命令的二进制文件&#xff0c;你可以使用如下命令&#xff1a; whereis -b ping查看命令的帮助文件&#xff0c;可以添…