• 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、相关函数

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

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

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

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

    编写客户端:

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    QT操作SQLite数据库_界面方式_增删改查
    【开发篇】八、SpringBoot整合MongoBD
    三数之和-力扣
    基于粒子群优化二维Otsu的肺CT图像分割算法
    Winform控件绑定数据
    优化group By查询很慢的问题建议使用DISTINCT字段做分组的查询优化
    java计算机毕业设计ssm信息科技知识交流学习平台
    【漏洞复现】74cms任意文件读取
    IC front-end design engineer
    每天一点python——day63
  • 原文地址:https://blog.csdn.net/m0_74937538/article/details/136283005