QSctpSocket 类
QSctpSocket 类提供了一个 SCTP 套接字。 更多信息...
头文件 | #include <QSctpSocket> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake | QT += network |
继承 | QTcpSocket |
- 所有成员列表,包括继承的成员
- QSctpSocket 是网络编程 API 的一部分。 网络编程 API.
公开函数
QSctpSocket(QObject *parent = nullptr) | |
虚拟 | ~QSctpSocket() |
bool | isInDatagramMode() const |
int | maximumChannelCount() const |
QNetworkDatagram | readDatagram() |
void | setMaximumChannelCount(int count) |
bool | writeDatagram(const QNetworkDatagram &datagram) |
重新实现的公开函数
虚拟 void | close() override |
虚拟 void | disconnectFromHost() override |
重新实现的保护函数
虚拟 qint64 | readData(char *data, qint64 maxSize) override |
虚拟 qint64 | readLineData(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平台上不受支持。
另请参阅:QSctpServer、QTcpSocket和QAbstractSocket。
成员函数文档
[显式]
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. 的商标。所有其他商标均为其各自所有者的财产。