- QSctpServer Class
- 公共成员函数
- 重写保护成员函数
- 详细介绍
- 成员函数文档
- QSctpServer::QSctpServer( QObject *parent = nullptr)
- [virtual] QSctpServer::~QSctpServer()
- [override virtual protected] void QSctpServer::incomingConnection(qintptr socketDescriptor)
- int QSctpServer::maximumChannelCount() const
- QSctpSocket QSctpServer::*nextPendingDatagramConnection()
- void QSctpServer::setMaximumChannelCount(int count)
QSctpServer Class
QSctpServer 提供了一个基于 QSCTP 协议的服务器。
属性 | 方法 |
---|---|
头文件 | #include <QSctpServer> |
qmake | QT += network |
引入版本 | Qt5.8 |
继承自 | QTcpServer |
该类最初在 Qt5.8 版本时引入。
公共成员函数
类型 | 函数名 |
---|---|
QSctpServer(QObject *parent = nullptr) | |
virtual | ~QSctpServer() |
int | maximumChannelCount() const |
QSctpSocket* | nextPendingDatagramConnection() |
void | setMaximumChannelCount(int count) |
重写保护成员函数
类型 | 函数名 |
---|---|
virtual void | incomingConnection(qintptr socketDescriptor) override |
详细介绍
SCTP(流控制传输协议)是一种传输层协议,其作用与流行的协议 TCP 和 UDP 类似。像 UDP 一样,SCTP 也是面向消息的,但是它可以通过与 TCP 类似的拥塞控制来确保消息的可靠性,让消息按顺序传输。您可以在 QSctpSocket 类文档中找到关于 SCTP 协议的更多的信息。
QSctpServer 是 QTcpServer 的便利子类,它允许您以 TCP 模拟或数据报模式接受传入的 SCTP 套接字连接。
QSctpServer 最常见的用法是构造一个 QSctpServer 类的对象并调用 setMaximumChannelCount() 函数设置该服务器准备支持的最大通道数。您可以在调用 setMaximumChannelCount() 函数时传入一个负值,这样便可以让服务端在 TCP 模拟模式下运行。另外,如果在 setMaximumChannelCount() 函数调用时传入0(0也是默认值),这会指定服务端使用对等端设置的最大通道数目。新的传入连接从服务器套接字描述符继承此数字,并根据远程端点设置对其进行调整。
在 TCP 模拟模式下,服务端允许客户端使用一条连续的字节流来进行数据传输。此时 QSctpSocket 的操作模式与普通的 QTcpServer 类似。您可以调用 nextPendingConnection() 函数将一个待处理的连接作为一个已连接的 QTcpSocket 套字节来接受。您可以使用该 QTcpSocket 套接字与客户端进行通信。此模式仅能使用基本的 SCTP 协议功能。套接字在系统层面通过 IP 传输 SCTP 数据包,并通过 QTcpSocket 接口与应用程序进行交互。
与 TCP 模拟模式相反,数据报模式是面向消息的,并且在端点之间提供了多个数据流的完全同时传输。您可以调用 nextPendingDatagramConnection() 函数将待处理的数据报模式的连接作为一个已连接的 QSctpSocket 套接字接受。
注意: WIndows系统不支持该特性。
另外您也可以在 QTcpServer ,QSctpSocket 和 QAbstractSocket 类文档中找到相关信息。
成员函数文档
QSctpServer::QSctpServer(QObject *parent = nullptr)
构造函数。构造一个 QSctpServer 类型的对象并将其设置为数据报模式。
parent 参数将传递到 QObject 构造函数中。
另外您也可以在 setMaximumChannelCount() ,listen() 和 setSocketDescriptor() 函数介绍中找到相关信息。
[virtual] QSctpServer::~QSctpServer()
析构函数。销毁 QSctpServer 类型的对象。如果服务端仍然在监听客户端连接,该套接字会自动关闭。
另外您也可以在 close() 函数介绍中找到相关信息。
[override virtual protected] void QSctpServer::incomingConnection(qintptr socketDescriptor)
重写 QTcpServer::incomingConnection(qintptr socketDescriptor) 函数。
int QSctpServer::maximumChannelCount() const
返回套接字能够支持的最大通道数。
如果返回值为0(默认值)意味着支持的最大通道数将由远程端点设置。
如果 QSctpServer 运行在 TCP 模拟模式,该函数返回-1。
另外您也可以在 setMaximumChannelCount() 函数介绍中找到相关信息。
QSctpSocket QSctpServer::*nextPendingDatagramConnection()
将下一个待处理的数据报模式的连接作为一个已连接的 QSctpSocket 对象返回。
数据报模式的连接提供了一个面向消息的、多数据流的通信。
该返回的套接字将作为服务端的子类创建,这意味着当 QSctpServer 对象销毁时,该套接字也将销毁。当您使用完一个对象后显式地删除该对象是一个好的做法,这能避免浪费内存。
如果没有待处理的数据报模式的连接,该函数将返回空。
注意: 返回的 QSctpSocket 对象不能被其他线程使用。如果想在其他线程中使用到达的连接,您需要重写 incomingConnection() 函数。
另外您也可以在 hasPendingConnections() ,nextPendingConnection() 函数介绍和 QSctpSocket 类文档中找到相关信息。
void QSctpServer::setMaximumChannelCount(int count)
设置在数据报模式下服务端准备支持的最大通道数为 count 。
如果 count 为0,服务端将使用其他端点的最大通道数。
如果 count 为一个负值,则 QSctpServer 将会在 TCP 模拟模式下运行。
另外您也可以在 maximumChannelCount() 函数介绍和 QSctpSocket 类文档中找到相关信息。