首页 > 编程语言 >day09(Qt)网络编程

day09(Qt)网络编程

时间:2024-10-21 23:16:41浏览次数:3  
标签:QTcpServer day09 Qt 编程 UDP TCP IP地址 连接 端口号

目录

网络编程

1. 复习时间

1.1 TCP:全双工通信、面向连接、可靠

1.2 UDP:全双工通信、面向无连接、不可靠

1.3 IP地址

1.4 端口号

2. 编程之前

3. 相关函数


网络编程

1. 复习时间

【提问】TCP和UDP的区别?

UDP TCP 协议相同点:都存在于传输层,全双工通信

1.1 TCP:全双工通信、面向连接、可靠

TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。

高可靠原因:

1.三次握手、四次挥手

2.序列号和应答机制

3.超时,错误重传机制

4.拥塞控制、流量控制(滑动窗口)

适用场景

适合于对传输质量要求较高的通信

在需要可靠数据传输的场合,通常使用TCP协议

即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议

1.2 UDP:全双工通信、面向无连接、不可靠

UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

适用场景

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

适合于广播/组播式通信中。

以及音视频通讯通常采用UDP协议

【提问】IP和端口号?

1.3 IP地址

IP地址是Internet中主机的标识,Internet中的主机要与别的机器通信必须具有一个IP地址,IP地址为32位(IPv4)或者128位(IPv6),IPV4表示形式:常用点分十进制形式,如202.38.64.10,最后都会转换为一个32位的无符号整数。

1.4 端口号

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

● TCP端口号与UDP端口号独立(UDP port为8888,TCP port也可为8888 )

● 端口号一般由IANA (Internet Assigned Numbers Authority) 管理

● 端口用两个字节来表示

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

已登记端口:1024~49151(----可用来建立与其它主机的会话----)

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

补充,Qt建议使用端口号:

  • 2000+
  • 避免连号,例如8888/6666等

2. 编程之前

与数据库编程一样,Qt的网络编程之前需要先在.pro文件中增加网络模块。

Qt网编主要用到以下几个类:

  • QTcpServer

基于TCP的Socket服务器连接管理类,本身不继承QIODevice,因此无法进行IO操作。

  • QTcpSocket

基于TCP的Socket连接类,间接继承了QIODevice,是实现IO的TCP类。

  • QTextStream | QByteArray

数据传输的方式,前者为更加封装类型,适合Qt之间进行通信;后者为字节数组,适用性更广泛一些。

3. 相关函数

网络编程中使用的相关函数如下:

// 构造函数
QTcpServer::​QTcpServer(QObject * parent = 0)
// 开启网络监听,等待客户端发起连接请求
// 参数1:QHostAddress为IP地址封装类,QHostAddress::Any表示监听所有IP地址发起的请求。
// 参数2:端口号,默认值0表示自动选择。
// 返回值:监听是否成功
bool QTcpServer::​listen(const QHostAddress & address = QHostAddress::Any, quint16 port = 0)

// 关闭监听
void QTcpServer::​close()

// 构造函数
QTcpSocket::​QTcpSocket(QObject * parent = 0)

// 服务器发起连接请求
// 参数1:服务器的IP地址
// 参数2:服务器的端口号
// 参数3:数据流打开模式,默认为读写
void QAbstractSocket::​connectToHost(const QString & hostIP, quint16 port, OpenMode openMode = ReadWrite)

// 建立连接成功的信号
void QTcpServer::​newConnection()            [signal]

// 连接成功和失败的信号
void QAbstractSocket:: connected()            [signal]
void QAbstractSocket::disconnected()            [signal]

// 返回数据流是否打开
bool QIODevice::​isOpen() const

// 为主动发起请求的每一个客户端分配一个对应的连接对象
// 返回值为TCP连接对象
QTcpSocket * QTcpServer::​nextPendingConnection()    

// 拿到对面的IP
QHostAddress QAbstractSocket::​peerAddress() const

// 拿到对面的端口号
quint16 QAbstractSocket::​peerPort() const

// 拿到IP的字符串,在某些计算机中返回值的IP地址字符串前面有一些多余内容
QString QHostAddress::​toString() const

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

// 读取所有内容到字节数组中
QByteArray QIODevice::​readAll()

// 构造函数
// 参数:一个支持IO的对象
QTextStream::​QTextStream(QIODevice * device)

// 输出内容
// 参数:要输出的文本内容(QString)
// 返回值:支持链式调用
QTextStream & QTextStream::​operator<<(const QString & string)

// 读取所有字符串
QString QTextStream::​readAll()

【单工示例代码】

通过网盘分享的文件:Day7_24072_Client (2).zip

链接:https://pan.baidu.com/s/1LVFaYOardq8VV2IlggR_UQ

提取码: d7xx

标签:QTcpServer,day09,Qt,编程,UDP,TCP,IP地址,连接,端口号
From: https://blog.csdn.net/QR70892/article/details/143136016

相关文章

  • Qt编程技巧小知识点(3)十进制与十六进制数据转化
    文章目录Qt编程技巧小知识点(3)十进制与十六进制数据转化小结Qt编程技巧小知识点(3)十进制与十六进制数据转化  上下位机之间数据交互常需要将上位机的十进制发送到下位机,这时候常常涉及到数据进制的转化,这里以十进制与十六进制的数据转化为例,来简要阐述一下:首先,我们......
  • 【Javaee】网络编程-TCP Socket
    前言前文中我们介绍了UDPSocket相关的构造方法和方法,并实现了UDP的回显服务器和客户端。本篇将介绍TCPSocket,并使用TCPSocketapi实现服务器和客户端的通信一.TCPSocket的常见方法1.ServerSocketServerSocket是创建TCP服务端Socket的API1)ServerSocket构造方法方......
  • 第二次考试函数编程
    05类##1publicintsum(double...values)//接受若干个,最后一个为valus##2//构造器条件判断if(x>0&&y>0&&z>0&&p>0)else ##3/数字转化成字符串后返回doublearea=this.width*this.height;returnString.forma......
  • 九,网络编程UDP和TCP
    Java网络编程详解:从基础到实践网络编程是现代软件开发中不可或缺的一部分。在Java中,我们可以通过多种方式实现网络通信,其中最常用的是UDP和TCP协议。本文将详细介绍Java网络编程的基础知识、UDP和TCP编程的核心概念和实现方法。网络编程概述计算机网络定义计算机网络是指将地......
  • 深度学习CNN算法狗类识别系统01-python带pyqt5界面数据集包配置
    项目基本介绍:【算法】深度学习CNN网络xception算法网络【环境】python=3.8pytorchopencvpyqt5matplotlib(含详细环境配置教程视频)【文件】训练、预测全部源代码、训练好的型、数据集、模型评价指标:训练acc/loss曲线图和混淆矩阵图、UI界面源码及源文件、环境配置教程视......
  • 人工智能编程助手MarsCode注册和安装步骤
    字节跳动最近推出了人工智能编程助手MarsCode,功能非常强大。下面是安装和使用方法:一、注册MarsCode账号 注册地址:点击注册二、安装VSCode开发工具打开下载网站:https://code.visualstudio.com/点击“DownloadforWindows”按钮,如下图: 下载完毕后进行安装,然后点击按钮安装......
  • x86_64架构下交叉编译aarch64架构所使用的qt库
    本文基于qt版本5.12.8在x86_64位上交叉移植出aarch64架构使用的库一、编译环境x86_64uisrc@ubuntu:~$archx86_64uisrc@ubuntu:~$^Cuisrc@ubuntu:~$二、QT版本5.12.8下载解压wgethttp://download.qt.io/archive/qt/5.12/5.12.8/single/qt-everywhere-src-5.12.8......
  • 【Javaee】网络编程-UDP基础
     前言UDP是一个高效、快速、简单的传输协议,适合于需要低延迟和实时性的应用本篇将介绍UDP相关的api,并使用UDP构建回显服务器程序。一.UDP与TCP特点UDP:无连接,不可靠,面向数据报,全双工。TCP:有连接,可靠,面向字节流,全双工。何为连接?此处所说的连接是抽象的连接,并不是实际......
  • Springboot接入Mqtt
    MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为远程连接设备提过实时可靠的消息服务,作为一种低开......
  • CH9121_MQTT应用
    参考代码程序下载:https://files.cnblogs.com/files/blogs/808422/EXAM_mqtt_912x.zip?t=1729489963&download=true前言:(1)很多物联网\嵌入式应用需要将采集的数据上传到MQTT服务器以实现集中实时管理。然而可能前期选型时并未考虑到这一点导致选用的MCU没有网络功能无法实现。并且......