C++/Qt 网络(续二)

一、前言


        这篇文章将接着上述内容继续向下陈述,前文提到网络编程这块内容将拆分为四个内容,分别是主机信息查询、TCP通信、UDP通信和基于HTTP的网络应用程序。前篇文章以及讲述了第一个内容——《主机信息查询》,接下来将继续讲述第三个内容——《TCP通信》。

        对于前文的《主机信息查询》的内容,可自行查看文章:C++/Qt 网络(续一)-CSDN博客

二、TCP通信 


        传输控制协议(TCP)是一种被大多数Internet网络协议用于数据传输的底层网络协议,它是可靠的、面向流和连接的传输协议,特别适合用于连续数据传输。

        TCP通信必须先建立TCP连接,通信段分为客户端和服务器端,Qt提供QTcpSocket类和QTcpServer类,用于涉及TCP通信应用程序。服务器端程序必须使用QTcpServer进行端口监听,建立服务器,使用QTcpSocket建立连接,然后使用套接字(socket)进行通信。

        1、TCP通信相关的类

        QTcpServer主要用于在服务器端进行网络监听,创建网络socket连接,QTcpServer的父类是QObject,它的主要接口函数如表所示,表中列出了函数的返回值,但省略了函数的输入参数。

QTcpServer类的主要接口函数
类型 函数 功能
公有函数 void close() 关闭服务器,停止网络监听
bool listen() 在设置的IP地址和端口上进行监听,若成功就返回true
bool isListening() 返回true表示服务器处于监听状态
QTcpSocket *nextPendingConnection() 返回下一个等待接入的连接
QHostAddress serverAddress() 如果服务器处于监听状态,就返回服务器地址
quint16 serverPort() 如果服务器处于监听状态,就返回服务器监听端口
bool waitForNewConnection() 以阻塞方式等待新的连接
信号 void acceptError() 当接收一个新的连接发生错误时,此信号被发射
void newConnection() 当有新的连接时,此信号被发射
保护函数 void incomingConnection() 当有一个新的连接可用时,QTcpServer内部调用此函数,创建一个QTcpSocket对象,将其添加到内部可用新连接列表,然后发射newConnection信号
void addPendingConnection() 由incomingConnection()函数调用,将创建的QTcpSocket添加到内部可用新连接列表

        服务器端程序首先需要用函数listen()开始服务器端监听,可以设置监听的IP地址或端口,一般一个服务器程序只监听某个端口的网络连接。

        当有新的客户端接入时,QTcpServer内部的函数incomingConnection()会创建一个与客户端连接的QTcpSocket对象,然后发射newConnection()信号。在与newConnection()信号关联的槽函数中,我们可以用nextPendingConnection()接收客户端的连接,然后使用QTcpSocket对象与客户端通信。

        因此,在客户端与服务器端建立TCP连接后,具体的数据通信是通过QTcpSocket对象完成的。QTcpSocket类提供了TCP的接口,可以用QTcpSocket类实现标准的网络通信协议,如POP3、SMTP和NNTP等,也可以设计自定义协议。

        由于QTcpSocket是从QIODevice间接继承的类,因此QTcpSocket是一种I/O设备类,它具有流数据读写功能。除了构造函数和析构函数。QTcpSocket类的其他函数都是从父类QAbstractSocket继承或重定义的。QAbstractSocket类用于TCP通信的主要接口函数如表所示,表中省略的函数的输入参数。

QAbstractSocket类用于TCP通信的主要接口函数
类型 函数 功能
公共函数 void connectToHost() 以异步方式连接到指定IP地址和端口的TCP服务器,连接成功后会发射connected()信号
void disconnectFromHost() 断开socket连接,成功断开后会发射disconnected()信号
void close() 关闭socket的I/O设备,会自动调用disconnectFromHost()
bool waitForConnected() 等待建立socket连接,可设置等待时间,默认等待30秒
bool waitForDisconnected() 等待断开socket连接,可设置等待时间,默认等待30秒
QHostAddress localAddress() 返回本socket的地址
quint16 localPort() 返回本socket的端口
QHostAddress peerAdd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张鱼小丸子_微辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值