QSctpSocket class provides an SCTP socket. 更多...
头: | #include <QSctpSocket> |
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 () |
virtual void | disconnectFromHost () |
virtual qint64 | readData (char * data , qint64 maxSize ) |
virtual qint64 | readLineData (char * data , qint64 maxlen ) |
QSctpSocket class provides an SCTP socket.
SCTP (流控制传输协议) 是充当类似流行 TCP 和 UDP 协议角色的传输层协议。像 UDP,SCTP 面向消息,但它采用像 TCP 的拥塞控制确保消息的可靠、按顺序传输。
SCTP is connection-oriented protocol, which provides the complete simultaneous transmission of multiple data streams between endpoints. This multi-streaming allows data to be delivered by independent channels, so that if there is data loss in one stream, delivery will not be affected for the other streams.
Being message-oriented, SCTP transports a sequence of messages, rather than transporting an unbroken stream of bytes as does TCP. Like in UDP, in SCTP a sender sends a message in one operation, and that exact message is passed to the receiving application process in one operation. But unlike UDP, the delivery is guaranteed.
It also supports multi-homing, meaning that a connected endpoint can have alternate IP addresses associated with it in order to route around network failure or changing conditions.
QSctpSocket 是方便子类化的 QTcpSocket that allows you to emulate TCP data stream over SCTP or establish an SCTP connection for reliable datagram service.
QSctpSocket can operate in one of two possible modes:
To set a continuous byte stream mode, instantiate QSctpSocket 和调用 setMaximumChannelCount () with a negative value. This gives the ability to use QSctpSocket as a regular buffered QTcpSocket 。可以调用 connectToHost () to initiate connection with endpoint, write () to transmit and read () to receive data from the peer, but you cannot distinguish message boundaries.
默认情况下, QSctpSocket operates in datagram mode. Before connecting, call setMaximumChannelCount () to set the maximum number of channels that the application is prepared to support. This number is a parameter negotiated with the remote endpoint and its value can be bounded by the operating system. The default value of 0 indicates to use the peer's value. If both endpoints have default values, then number of connection channels is system-dependent. After establishing a connection, you can fetch the actual number of channels by calling 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 () and read a pending datagram by calling readDatagram () respectively.
Using the standard QIODevice 函数 read (), readLine (), write (), etc. is allowed in datagram mode with the same limitations as in continuous byte stream mode.
注意: Windows 平台不支持此特征。
另请参阅 QSctpServer , QTcpSocket ,和 QAbstractSocket .
创建
QSctpSocket
对象在状态
UnconnectedState
.
设置数据报操作模式。 parent 自变量会被传递给 QObject 的构造函数。
另请参阅 socketType () 和 setMaximumChannelCount ().
[virtual]
QSctpSocket::
~QSctpSocket
()
销毁套接字,关闭连接 (若有必要)。
另请参阅 close ().
[virtual]
void
QSctpSocket::
close
()
重实现自 QIODevice::close ().
[virtual]
void
QSctpSocket::
disconnectFromHost
()
重实现自 QAbstractSocket::disconnectFromHost ().
返回
true
若套接字正运行在数据报模式下。
另请参阅 setMaximumChannelCount ().
Returns the maximum number of channels that QSctpSocket is able to support.
0 值 (默认) 意味着连接通道数将由远程端点进行设置。
返回 -1,若 QSctpSocket is running in continuous byte stream mode.
另请参阅 setMaximumChannelCount (), readChannelCount (),和 writeChannelCount ().
[virtual protected]
qint64
QSctpSocket::
readData
(
char
*
data
,
qint64
maxSize
)
重实现自 QIODevice::readData ().
Reads a datagram from the buffer of the current read channel, and returns it as a QNetworkDatagram 对象,除发送器的主机地址和端口外。若可能,此函数还会试着确定数据报的目的地地址、端口及接待时的跳跃计数。
当故障时,返回 QNetworkDatagram 报告 无效 .
另请参阅 writeDatagram (), isInDatagramMode (),和 currentReadChannel ().
[virtual protected]
qint64
QSctpSocket::
readLineData
(
char
*
data
,
qint64
maxlen
)
重实现自 QIODevice::readLineData ().
Sets the maximum number of channels that the application is prepared to support in datagram mode, to count 。若 count is 0, endpoint's value for maximum number of channels is used. Negative count sets a continuous byte stream mode.
才调用此方法当 QSctpSocket 是在 UnconnectedState .
另请参阅 maximumChannelCount (), readChannelCount (),和 writeChannelCount ().
Writes a datagram to the buffer of the current write channel. Returns true on success; otherwise returns false.
另请参阅 readDatagram (), isInDatagramMode (),和 currentWriteChannel ().