QSctpSocket Class
QSctpSocket 类提供了一个 SCTP 套接字。更多
头文件: | #include <QSctpSocket> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
继承: | QTcpSocket |
- 所有成员(包括继承成员)的列表
- QSctpSocket 是网络编程 API 的一部分。
公共函数
QSctpSocket(QObject *parent = nullptr) | |
virtual | ~QSctpSocket() |
bool | isInDatagramMode() const |
int | maximumChannelCount() const |
QNetworkDatagram | readDatagram() |
void | setMaximumChannelCount(int count) |
bool | writeDatagram(const QNetworkDatagram &datagram) |
重新实现的公共函数
virtual void | close() override |
virtual void | disconnectFromHost() override |
重新实现的保护函数
virtual qint64 | readData(char *data, qint64 maxSize) override |
virtual qint64 | readLineData(char *data, qint64 maxlen) override |
详细说明
SCTP(流控制传输协议)是一种传输层协议,其作用与常用的 TCP 和 UDP 协议类似。与 UDP 一样,SCTP 也是面向消息的,但它能像 TCP 一样通过拥塞控制确保可靠、按顺序传输消息。
SCTP 是面向连接的协议,可在端点之间同时传输多个数据流。这种多数据流允许通过独立通道传输数据,因此如果一个数据流出现数据丢失,其他数据流的传输不会受到影响。
由于 SCTP 是面向消息的,因此它传输的是一连串的消息,而不是像 TCP 那样传输不间断的字节流。与 UDP 一样,在 SCTP 中,发送方在一次操作中发送一条信息,并在一次操作中将确切的信息传递给接收应用进程。但与 UDP 不同的是,发送是有保证的。
它还支持多归属,这意味着连接的端点可以有与之关联的备用 IP 地址,以便绕过网络故障或变化的条件进行路由。
QSctpSocket 是QTcpSocket 的一个便利子类,它允许你通过 SCTP 仿真 TCP 数据流,或建立 SCTP 连接以提供可靠的数据报服务。
QSctpSocket 可在两种可能的模式中运行:
- 连续字节流(TCP 仿真)。
- 多流数据报模式。
要设置连续字节流模式,请实例化 QSctpSocket 并调用setMaximumChannelCount() 并设置负值。这样就能将 QSctpSocket 作为普通缓冲QTcpSocket 使用。您可以调用connectToHost() 来启动与端点的连接,调用write() 来传输数据,调用read() 来接收来自对等设备的数据,但您无法区分消息的边界。
默认情况下,QSctpSocket 以数据报模式运行。连接前,请调用setMaximumChannelCount() 设置应用程序准备支持的最大通道数。该数目是与远程端点协商的参数,其值可由操作系统限定。默认值 0 表示使用对等端点的值。如果两个端点都使用默认值,那么连接通道数将取决于系统。建立连接后,可以通过调用readChannelCount() 和writeChannelCount() 来获取实际通道数。
QSctpSocket *socket = new QSctpSocket(this); socket->setMaxChannelCount(16); socket->connectToHost(QHostAddress::LocalHost, 1973); if (socket->waitForConnected(1000)) { int inputChannels = socket->readChannelCount(); int outputChannels = socket->writeChannelCount(); .... }
在数据报模式下,QSctpSocket 会为每个通道独立执行数据报缓冲。您可以通过调用writeDatagram() 将数据报队列到当前通道的缓冲区,也可以通过调用readDatagram() 分别读取待处理的数据报。
在数据报模式下,可以使用标准的QIODevice 函数read(),readLine(),write() 等,但其限制与连续字节流模式下相同。
注: Windows 平台不支持该类。
另请参阅 QSctpServer,QTcpSocket, 和QAbstractSocket 。
成员函数文档
[explicit]
QSctpSocket::QSctpSocket(QObject *parent = nullptr)
创建状态为UnconnectedState
的 QSctpSocket 对象。
设置数据报操作模式。parent 参数传递给QObject 的构造函数。
另请参阅 socketType() 和setMaximumChannelCount() 。
[virtual noexcept]
QSctpSocket::~QSctpSocket()
销毁套接字,必要时关闭连接。
另请参阅 close().
[override virtual]
void QSctpSocket::close()
重新实现:QAbstractSocket::close().
[override virtual]
void QSctpSocket::disconnectFromHost()
重新实现:QAbstractSocket::disconnectFromHost().
bool QSctpSocket::isInDatagramMode() const
如果套接字以数据报模式运行,则返回true
。
另请参阅 setMaximumChannelCount()。
int QSctpSocket::maximumChannelCount() const
返回QSctpSocket 能够支持的最大通道数。
0(默认值)表示连接通道数由远程端点设置。
如果QSctpSocket 以连续字节流模式运行,则返回 -1。
另请参阅 setMaximumChannelCount()、readChannelCount() 和writeChannelCount()。
[override virtual protected]
qint64 QSctpSocket::readData(char *data, qint64 maxSize)
重实现:QAbstractSocket::readData(char *data, qint64 maxSize)。
QNetworkDatagram QSctpSocket::readDatagram()
从当前读取通道的缓冲区读取数据报,并将其作为QNetworkDatagram 对象以及发送方的主机地址和端口返回。如果可能,该函数还将尝试确定数据报的目标地址、端口和接收时的跳数。
如果失败,则返回一个报告not valid 的QNetworkDatagram 。
另请参阅 writeDatagram()、isInDatagramMode() 和currentReadChannel()。
[override virtual protected]
qint64 QSctpSocket::readLineData(char *data, qint64 maxlen)
重实现:QAbstractSocket::readLineData(char *data, qint64 maxlen)。
void QSctpSocket::setMaximumChannelCount(int count)
将应用程序在数据报模式下准备支持的最大通道数设置为count 。如果count 为 0,则使用端点的最大通道数值。负数count 将设置连续字节流模式。
只有当QSctpSocket 处于未连接状态时才调用此方法。
另请参阅 maximumChannelCount()、readChannelCount() 和writeChannelCount()。
bool QSctpSocket::writeDatagram(const QNetworkDatagram &datagram)
将datagram 写入当前写入通道的缓冲区。成功时返回 true,否则返回 false。
另请参阅 readDatagram()、isInDatagramMode() 和currentWriteChannel()。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.