The QSctpSocket class provides an SCTP socket. 更多...
头: | #include <QSctpSocket> |
CMake: |
find_package(Qt6 COMPONENTS Network REQUIRED)
target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
Since: | Qt 5.8 |
继承: | QTcpSocket |
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 is a convenience subclass of QTcpSocket 允许基于 SCTP 模拟 TCP 数据流,或为可靠数据报服务建立 SCTP 连接。
QSctpSocket can operate in one of two possible modes:
To set a continuous byte stream mode, instantiate QSctpSocket and call setMaximumChannelCount () with a negative value. This gives the ability to use QSctpSocket as a regular buffered QTcpSocket 。可以调用 connectToHost () 以初启端点连接, write () 以传输和 read () 从对等方接收数据,但无法区分消息边界。
By default, QSctpSocket operates in datagram mode. Before connecting, call setMaximumChannelCount () 以设置应用程序准备支持的最大通道数。此数字是与远程端点的协商参数,且其值可以由操作系统界定。默认值 0 指示使用对等方值。若 2 端点拥有默认值,那么连接通道数从属系统。建立连接后,可以抓取实际通道数通过调用 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(); .... }
In datagram mode, QSctpSocket performs the buffering of datagrams independently for each channel. You can queue a datagram to the buffer of the current channel by calling writeDatagram () 和读取待决数据报通过调用 readDatagram () 分别。
使用标准 QIODevice 函数 read (), readLine (), write (),等,在数据报模式下是允许的,具有如在连续字节流模式下的相同局限性。
注意: Windows 平台不支持此特征。
另请参阅 QSctpServer , QTcpSocket ,和 QAbstractSocket .
创建 QSctpSocket 对象按状态
UnconnectedState
.
设置数据报操作模式。 parent 自变量会被传递给 QObject 的构造函数。
另请参阅 socketType () 和 setMaximumChannelCount ().
[虚拟]
QSctpSocket::
~QSctpSocket
()
销毁套接字,关闭连接 (若有必要)。
另请参阅 close ().
[override virtual]
void
QSctpSocket::
close
()
重实现: QAbstractSocket::close ().
[override virtual]
void
QSctpSocket::
disconnectFromHost
()
重实现: QAbstractSocket::disconnectFromHost ().
返回
true
若套接字正运行在数据报模式下。
另请参阅 setMaximumChannelCount ().
返回的最大通道数是 QSctpSocket 是能支持的。
0 值 (默认) 意味着连接通道数将由远程端点进行设置。
返回 -1,若 QSctpSocket 正在连续字节流模式下运行。
另请参阅 setMaximumChannelCount (), readChannelCount (),和 writeChannelCount ().
[override virtual protected]
qint64
QSctpSocket::
readData
(
char
*
data
,
qint64
maxSize
)
重实现: QAbstractSocket::readData (char *data, qint64 maxSize).
从当前读取通道缓冲读取数据报,并返回它按 QNetworkDatagram 对象,除发送者的主机地址和端口外。若可能,此函数还会试着确定数据报的目的地地址、端口及接待时的跳跃计数。
当故障时,返回 QNetworkDatagram 报告 无效 .
另请参阅 writeDatagram (), isInDatagramMode (),和 currentReadChannel ().
[override virtual protected]
qint64
QSctpSocket::
readLineData
(
char
*
data
,
qint64
maxlen
)
重实现: QAbstractSocket::readLineData (char *data, qint64 maxlen).
将应用程序在数据报模式下准备支持的最大通道数设为 count 。若 count 为 0,使用端点的最大通道数值。负 count 设置连续字节流模式。
才调用此方法当 QSctpSocket 处于 UnconnectedState。
另请参阅 maximumChannelCount (), readChannelCount (),和 writeChannelCount ().
写入 datagram 到当前写入通道缓冲。返回 true 当成功时;否则返回 false。
另请参阅 readDatagram (), isInDatagramMode (),和 currentWriteChannel ().