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/702092.shtml

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

相关文章

软件工程复习笔记

一、软件工程概述 软件 = 程序 + 数据 + 相关文档 软件危机(Software Crisis) 指由于落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。 软件工程三要素 方法、工具、过程 软件工程目标 在给定成本、进度的…

DDS通信协议

DDS&#xff08;Data Distribution Service&#xff09;是一套通信协议和 API 标准&#xff1b;它提供了以数据为中心的连接服务&#xff0c;基于发布者-订阅者模型。这是一套中间件&#xff0c;它提供介于操作系统和应用程序之间的功能&#xff0c;使得组件之间可以互相通信。…

首届Supernova国际青少年模特艺术大赛

2024 全国海选北京站&#xff0c;于 2 月 21 日圆满成功。 # 中国首席超模 # 伍倩 # 超模 # 演员 # 那广子 身着明星挚爱高定礼服 EvaLendel 惊艳亮相。总决赛重磅起航&#xff01;报名从速&#xff01; 整场海选比赛全国进行角逐&#xff0c;有北京、深圳、重庆、新…

LeetCode234.回文链表

题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true思路 找到链表的中间节点&#xff1a;可以使用快慢指针…

【JavaEE】_ajax构造HTTP请求

目录 1. ajax简述 2. ajax构造HTTP请求 2.1 jquery库的引入 2.2 ajax构造HTTP请求格式 3. ajax构造GET请求实例 4. ajax构造POST请求实例 本专栏关于form表单构造HTTP请求一文中已经提到&#xff1a;form表单构造法只支持GET和POST&#xff0c;且会触发页面跳转。 原文详…

互联网上的音频和视频服务

1 互联网上的音频和视频服务概述 许多用户开始利用互联网传送音频/视频信息。 在许多情况下&#xff0c;这种音频/视频常称为多媒体信息。 多媒体信息&#xff1a;内容上相互关联的文本、图形、图像、声音、动画和活动图像等所形成的复合数据信息。 多媒体信息的两个最主要…

Pytorch 复习总结 3

Pytorch 复习总结&#xff0c;仅供笔者使用&#xff0c;参考教材&#xff1a; 《动手学深度学习》Stanford University: Practical Machine Learning 本文主要内容为&#xff1a;Pytorch 多层感知机。 本文先介绍了多层感知机的用法&#xff0c;再就训练过程中经常出现的过拟…

Spring 容器、核心容器总结

目录 创建容器获取 bean容器类层次结构图核心容器总结容器相关bean 相关依赖注入相关 创建容器 方式一&#xff1a; 类路径加载配置文件 ApplicationContext ctx new ClassPathXmlApplicationContext("applicationContext.xml");方式二&#xff1a; 文件路径加载配…

消息队列-RabbitMQ:延迟队列、rabbitmq 插件方式实现延迟队列、整合SpringBoot

十六、延迟队列 1、延迟队列概念 延时队列内部是有序的&#xff0c;最重要的特性就体现在它的延时属性上&#xff0c;延时队列中的元素是希望在指定时间到了以后或之前取出和处理&#xff0c;简单来说&#xff0c;延时队列就是用来存放需要在指定时间被处理的元素的队列。 延…

移动端自动化常用的元素定位工具 介绍

在移动端自动化测试和开发中&#xff0c;元素定位是非常关键的一步。以下是一些常用的工具和技术来帮助开发者或测试工程师在移动设备上定位元素&#xff1a; 1. **UiAutomator**: - **UiAutomator** 是 Android 官方提供的自动化测试框架。它可以用来编写测试脚本&…

Linux之项目部署与发布

目录 一、Nginx配置安装&#xff08;自启动&#xff09; 1.一键安装4个依赖 2. 下载并解压安装包 3. 安装Nginx 4. 启动 nginx 服务 5. 对外开放端口 6. 配置开机自启动 7.修改/etc/rc.d/rc.local的权限 二、后端部署tomcat负载均衡 1. 准备2个tomcat 2. 修改端口 3…

4.寻找两个正序数组的中位数

题目&#xff1a;给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 解题思路&#xff1a;用二分法查找。使用归并的方式&#xff0c;合并两个有序数组&#xff0c;得到一个大的有序数组。大的…

树状数组与线段树<2>——线段树初步

这个系列终于更新了(主要因为树状数组初步比较成功) 话不多说&#xff0c;切入正题。 什么是线段树&#xff1f; 线段树是一种支持单点修改区间查询(树状数组也行) and 区间修改单点查询(树状数组不行) and 区间修改区间查询(树状数组更不行)的高级数据结构&#xff0c;相当…

Spring Boot利用Kaptcha生成验证码

生成验证码 我们在登录或注册某个网站的时候&#xff0c;会需要我们输入验证码&#xff0c;才能登录注册&#xff0c;那么如何生成验证码呢&#xff1f;其实&#xff0c;生成验证码我们可以用Java Swing在后台内存里的区域画一个出来&#xff0c;但是非常麻烦&#xff0c;所以…

在IDEA中创建vue hello-world项目

工作中最近在接触vue前端项目,记录一下从0搭建一个vue hello world项目的步骤 1、本地电脑安装配置node、npm D:\Project\vue\hello-world>node -v v14.21.3 D:\Project\vue\hello-world>npm -v 6.14.18 D:\Project\vue\hello-world> 2、设置npm国内淘宝的景象 …

unity学习(41)——创建(create)角色脚本(panel)——UserHandler(收)+CreateClick(发)——发包!

1.客户端的程序结构被我精简过&#xff0c;现在去MessageManager.cs中增加一个UserHandler函数&#xff0c;根据收到的包做对应的GameInfo赋值。 2.在Model文件夹下新增一个协议文件UserProtocol&#xff0c;内容很简单。 using System;public class UserProtocol {public co…

涵盖5大领域的机器学习工具介绍

随着数据的产生及其使用量的不断增加&#xff0c;对机器学习模型的需求也在成倍增加。由于ML系统包含了算法和丰富的ML库&#xff0c;它有助于分析数据和做出决策。难怪机器学习的知名度越来越高&#xff0c;因为ML应用几乎主导了现代世界的每一个方面。随着企业对这项技术的探…

Java中PDF文件传输有哪些方法?

专栏集锦&#xff0c;大佬们可以收藏以备不时之需&#xff1a; Spring Cloud 专栏&#xff1a;http://t.csdnimg.cn/WDmJ9 Python 专栏&#xff1a;http://t.csdnimg.cn/hMwPR Redis 专栏&#xff1a;http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏&#xff1a;http://t.csdni…

记录一些mac电脑重装mysql和pgsql的坑

为什么要重装,是想在mac电脑 创建data目录…同事误操作,导致电脑重启不了.然后重装系统后,.就连不上数据库了.mysql和pgsql两个都连不上.网上也查了很多资料.实在不行,.就重装了… 重装mysql. 1.官网下载 https://www.mysql.com/downloads/ 滑到最下面 选择 选择对应的芯片版本…

设计推特(Leetcode355)

例题&#xff1a; https://leetcode.cn/problems/design-twitter/ 分析&#xff1a; 推特其实类似于微博&#xff0c;在微博中可以发送文章。 求解这类题目&#xff0c;我们需要根据题目需求&#xff0c;利用面向对象的思想&#xff0c;先对需求做一个抽象&#xff0c;看看能…