c++ Qt 网络连接

news2024/10/2 12:19:42

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.coloradmin.cn/o/1471987.html

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

相关文章

[C++]使用C++部署yolov9的tensorrt模型进行目标检测

部署YOLOv9的TensorRT模型进行目标检测是一个涉及多个步骤的过程&#xff0c;主要包括准备环境、模型转换、编写代码和模型推理。 首先&#xff0c;确保你的开发环境已安装了NVIDIA的TensorRT。TensorRT是一个用于高效推理的SDK&#xff0c;它能对TensorFlow、PyTorch等框架训…

kubectl 命令行管理K8S

目录 陈述式资源管理方法 1.基本信息查看 查看版本信息 查看资源对象简写 查看集群信息 配置kubectl自动补全 node节点查看日志 查看 master 节点状态 查看命名空间 查看default命名空间的所有资源 创建命名空间yy 删除命名空间yy 在命名空间kube-public 创建副本…

户用光伏设计和工商业光伏设计有什么区别?

随着全球对可再生能源需求的不断增长&#xff0c;光伏技术作为一种高效、清洁的能源解决方案&#xff0c;正受到越来越多的关注。在光伏系统的设计和安装过程中&#xff0c;户用光伏和工商业光伏之间存在显著的差异。本文将探讨这两种类型的光伏设计之间的主要区别。 一、目标与…

List去重有几种方式

目录 1、for循环添加去重 2、for 双循环去重 3、for 双循环重复坐标去重 4、Set去重 5、stream流去重 1、for循环添加去重 List<String> oldList new ArrayList<>();oldList.add("张三");oldList.add("张三");oldList.add("李四&q…

Linux提权—服务漏洞,以MySQL-UDF提权为例

UDF(user defined function&#xff0c;用户自定义函数) 利用条件&#xff1a; 有对MySQL数据库进行创建&#xff0c;插入&#xff0c;删除的权限 secure_file_priv为空 利用过程 secure_file_priv的值为空或者是我们恰巧需要用到的目录&#xff0c;如下&#xff1a; 提权成…

MATLAB环境下一种改进的瞬时频率(IF)估计方法

相对于频率成分单一、周期性强的平稳信号来说&#xff0c;具有非平稳、非周期、非可积特性的非平稳信号更普遍地存在于自然界中。调频信号作为非平稳信号的一种&#xff0c;由于其频率时变、距离分辨率高、截获率低等特性&#xff0c;被广泛应用于雷达、地震勘测等领域。调频信…

C# OpenVINO PaddleSeg实时人像抠图PP-MattingV2

目录 效果 项目 代码 下载 C# OpenVINO 百度PaddleSeg实时人像抠图PP-MattingV2 效果 项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using System; using System.Diagnostics; using System.Drawing; using System.Security.Cryptography; using System.Text; us…

mysql 2-21

约束的分类 添加约束 查看表约束 非空约束 唯一性约束 复合的唯一性约束 只要有一个字段不重复&#xff0c;就可以添加成功 主键约束 自增列 mysql 8.0具有持久化&#xff0c;重启服务器会继续自增 外键约束 创建外键 关联必须有唯一性约束&#xff0c;或者是主键 约束等级 …

HashMap的put()方法执行流程

HashMap的数据结构在jdk1.8之前是数组链表&#xff0c;为了解决数据量过大、链表过长是查询效率会降低的问题变成了数组链表红黑树的结构&#xff0c;利用的是红黑树自平衡的特点。 链表的平均查找时间复杂度是O(n)&#xff0c;红黑树是O(log(n))。 HashMap中的put方法执行过…

MySQL认证方法介绍

阅读本文之前请参阅----MySQL 数据库安装教程详解&#xff08;linux系统和windows系统&#xff09; MySQL数据库的认证方法对于确保数据安全和维护系统完整性至关重要。在MySQL中&#xff0c;有多种认证方法可供选择&#xff0c;每种方法都有其特定的用途和配置方式。本文将详细…

Odoo系统安装部署并结合内网穿透实现固定域名访问本地ERP系统

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

九州金榜|家庭教育小技巧分享

说到家庭教育&#xff0c;每个做父母的都会有一套自己的理论&#xff0c;家庭教育也是每个家长必须学会的知识&#xff0c;下面九州金榜金榜家庭教育就为大家带来一些教育教育小技巧&#xff0c;助大家在家庭教育中得到一些启示&#xff1a; 一、树立榜样 为孩子树立好榜样&a…

【C语言基础】:操作符详解(二)

文章目录 操作符详解一、上期扩展二、单目操作符三、逗号表达式四、下标访问[]、 函数调用()五、结构成员访问操作符六、操作符的属性&#xff1a;优先级、结合性1. 优先级2. 结合性 操作符详解 上期回顾&#xff1a;【C语言基础】&#xff1a;操作符详解(一) 一、上期扩展 …

测试C#使用ViewFaceCore实现图片中的人脸遮挡

基于ViewFaceCore和DlibDotNet都能实现人脸识别&#xff0c;准备做个遮挡图片中人脸的程序&#xff0c;由于暂时不清楚DlibDotNet返回的人脸尺寸与像素的转换关系&#xff0c;最终决定使用ViewFaceCore实现图片中的人脸遮挡。   新建Winform项目&#xff0c;在Nuget包管理器中…

Windows常用协议

LLMNR 1. LLMNR 简介 链路本地多播名称解析(LLMNR)是一个基于域名系统(DNS)数据包格式的协议,可用于解析局域网中本地链路上的主机名称。它可以很好地支持IPv4和IPv6&#xff0c;是仅次于DNS 解析的名称解析协议。 2.LLMNR 解析过程 当本地hosts 和 DNS解析 当本地hosts 和 …

安装python的docker库

文章目录 一、在线安装二、制作离线安装包2.1 报错处理 一、在线安装 先确定是否有pip命令。 yum install python-pip直接安装。 pip install docker查看docker库。 pip list二、制作离线安装包 在有互联网的环境下直接安装。 #docker为下载下来的包名。 pip download do…

CCF-A类ASE‘ 24 6月7日截稿!共同探讨软件工程领域的未来!

会议之眼 快讯 第39届ASE (International Conference on Automated Software Engineering)即自动化软件工程国际会议将于 2024 年 10月27-11月1日在美国加利福尼亚州萨克拉门托举行&#xff01; ASE会议作为自动化软件工程领域的首要研究会议&#xff0c;承载着全球自动化软件工…

《高考》期刊杂志投稿邮箱知网教育类期刊发表

《高考》杂志是由国家新闻出版总署批准的正规教育类期刊。主要宣传高中新课程改革的专业性&#xff0c;是教育管理工作者、高中一线教师交流经验、探讨问题的重要平台&#xff0c;期刊突出政策性、针对性、指导性&#xff0c;是一本以教育科研成果展示为主&#xff0c;兼具教育…

邀请函 | 2024年数据技术嘉年华集结号已吹响,期待您参会!

龙腾四海内&#xff0c;风云际会时&#xff0c;2024年中国数据嘉年华如约而至。从起初小范围的网友聚会&#xff0c;到如今面向全国各地从业者、爱好者的年度集会&#xff0c;纵使岁月更迭&#xff0c;我们初心依旧。我们在各自最好的年华里共同见证了中国数据库行业的蓬勃发展…

MySQL-JDBC

1. JDBC介绍 JDBC&#xff08;Java Database Connectivity&#xff09;是 Java 连接数据库的标准接口&#xff0c;它提供了一种与数据库交互的统一方式&#xff0c;使得 Java 程序能够通过标准 API 访问和操作各种关系型数据库。 2. JDBC使用步骤 第0步&#xff1a;导bao 第1步…