QSctpSocket 类

QSctpSocket 类提供了一个 SCTP 套接字。 更多信息...

头文件 #include <QSctpSocket>
CMakefind_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmakeQT += network
继承 QTcpSocket

公开函数

QSctpSocket(QObject *parent = nullptr)
虚拟~QSctpSocket()
boolisInDatagramMode() const
intmaximumChannelCount() const
QNetworkDatagramreadDatagram()
voidsetMaximumChannelCount(int count)
boolwriteDatagram(const QNetworkDatagram &datagram)

重新实现的公开函数

虚拟 voidclose() override
虚拟 voiddisconnectFromHost() override

重新实现的保护函数

虚拟 qint64readData(char *data, qint64 maxSize) override
虚拟 qint64readLineData(char *data, qint64 maxlen) override

详细描述

SCTP (流控制传输协议) 是一种传输层协议,其作用类似于流行的 TCP 和 UDP 协议。与 UDP 类似,SCTP 是面向消息的,但它确保了带有拥塞控制的可靠、顺序的消息传输。

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平台上不受支持。

另请参阅:QSctpServerQTcpSocketQAbstractSocket

成员函数文档

[显式] QSctpSocket::QSctpSocket(QObject *parent = nullptr)

创建一个QSctpSocket对象,其状态为UnconnectedState

设置数据报操作模式。将parent参数传递给QObject的构造函数。

另请参阅:socketType()和setMaximumChannelCount()).

[虚函数,Noexcept] QSctpSocket::~QSctpSocket()

销毁套接字,必要时关闭连接。

另请参阅:close()).

[重写虚函数] void QSctpSocket::close()

重写:QAbstractSocket::close()).

[重写虚函数] void QSctpSocket::disconnectFromHost()

重写:QAbstractSocket::disconnectFromHost()).

bool QSctpSocket::isInDatagramMode() const

如果套接字正在数据报模式运行,则返回true

另请参阅:setMaximumChannelCount()).

int QSctpSocket::maximumChannelCount() const

返回 QSctpSocket 能够支持的通道最大数量。

0(默认值)表示连接通道的数量将由远程端点设置。

如果 QSctpSocket 在连续字节流模式下运行,则返回 -1。

另请参阅 setMaximumChannelCount(),readChannelCount() 和 writeChannelCount()。

[重写虚拟受保护] qint64 QSctpSocket::readData(char *data, qint64 maxSize)

重述:QAbstractSocket::readData(char *data, qint64 maxSize)。

QNetworkDatagram QSctpSocket::readDatagram()

从当前读取通道的缓冲区中读取一个数据报,并以一个 QNetworkDatagram 对象的形式返回它,同时包含发送者的主机地址和端口号。如果可能,该函数还将在接收时间尝试确定数据报的目的地址、端口号和跳数。

失败时,返回一个报告 无效QNetworkDatagram

另请参阅 writeDatagram(),isInDatagramMode() 和 currentReadChannel()。

[重写虚拟受保护] qint64 QSctpSocket::readLineData(char *data, qint64 maxlen)

重述:QAbstractSocket::readLineData(char *data, qint64 maxlen)。

void QSctpSocket::setMaximumChannelCount(int count)

将应用程序在数据报模式下准备支持的通道最大数设置为 count。如果 count 是 0,则使用端点指示的通道最大数。负 count 步设置为连续字节流模式。

仅在 QSctpSocket 处于 UnconnectedState 时调用此方法。

另请参阅 maximumChannelCount(),readChannelCount() 和 writeChannelCount()。

bool QSctpSocket::writeDatagram(const QNetworkDatagram &datagram)

datagram 写入当前写入通道的缓冲区。成功则返回 true;否则返回 false。

另请参阅 readDatagram(),isInDatagramMode() 和 currentWriteChannel()。

© 2024 The Qt Company Ltd. 本文档中包含的文档贡献是各自所有者的版权。提供的文档是根据自由软件基金会的 GNU 自由文档许可协议版本 1.3 许可使用的。Qt 以及相应的商标是芬兰和/或其他国家的 The Qt Company Ltd. 的商标。所有其他商标均为其各自所有者的财产。