QSctpSocket 类

The QSctpSocket class provides an SCTP socket. 更多...

头: #include <QSctpSocket>
qmake: QT += network
Since: Qt 5.8
继承: QTcpSocket

该类在 Qt 5.8 引入。

公共函数

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:

  • 连续字节流 (TCP 仿真)。
  • 多流数据报模式。

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:: QSctpSocket ( QObject * parent = nullptr)

创建 QSctpSocket 对象按状态 UnconnectedState .

设置数据报操作模式。 parent 自变量会被传递给 QObject 的构造函数。

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

[虚拟] 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 值 (默认) 意味着连接通道数将由远程端点进行设置。

返回 -1,若 QSctpSocket 正在连续字节流模式下运行。

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

[override virtual protected] qint64 QSctpSocket:: readData ( char * data , qint64 maxSize )

重实现: QAbstractSocket::readData (char *data, qint64 maxSize).

QNetworkDatagram QSctpSocket:: readDatagram ()

从当前读取通道缓冲读取数据报,并返回它按 QNetworkDatagram 对象,除发送者的主机地址和端口外。若可能,此函数还会试着确定数据报的目的地地址、端口及接待时的跳跃计数。

当故障时,返回 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 是在 UnconnectedState .

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

bool QSctpSocket:: writeDatagram (const QNetworkDatagram & datagram )

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

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