QSctpSocket 類

The QSctpSocket 類提供 SCTP (流控製傳輸協議) 套接字。 更多...

頭: #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 () override
virtual void disconnectFromHost () override

靜態公共成員

const QMetaObject staticMetaObject

重實現保護函數

virtual qint64 readData (char * data , qint64 maxSize ) override
virtual qint64 readLineData (char * data , qint64 maxlen ) override

額外繼承成員

詳細描述

The QSctpSocket 類提供 SCTP (流控製傳輸協議) 套接字。

SCTP (流控製傳輸協議) 是充當類似流行 TCP 和 UDP 協議角色的傳輸層協議。像 UDP,SCTP 麵嚮消息,但它采用像 TCP 的擁塞控製確保消息的可靠、按順序傳輸。

SCTP 是麵嚮連接的協議,提供端點之間多數據流的完全同時傳輸。這種多流允許通過獨立通道交付數據,因此,若某個流有數據丟失,其它流的交付不受影響。

由於麵嚮消息,SCTP 傳輸消息序列,而不是如 TCP 所做的傳輸不間斷字節流。像 UDP,SCTP 發送者在一個操作中發送消息,並在一個操作中將消息準確傳遞給接收應用程序進程。但不像 UDP,交付有保證。

它還支持多歸航,意味著連接端點可以擁有關聯替代 IP 地址,以圍繞網絡故障 (或變化條件) 進行路由。

QSctpSocket 是方便子類化的 QTcpSocket 允許基於 SCTP 模擬 TCP 數據流,或為可靠數據報服務建立 SCTP 連接。

QSctpSocket 可以運轉於 2 可能模式之一:

  • 連續字節流 (TCP 仿真)。
  • 多流數據報模式。

要設置連續字節流模式,實例化 QSctpSocket 和調用 setMaximumChannelCount () 采用負值。這賦予能力以使用 QSctpSocket 作為常規緩衝 QTcpSocket 。可以調用 connectToHost () 以初啓端點連接, write () 以傳輸和 read () 從對等方接收數據,但無法區分消息邊界。

默認情況下, QSctpSocket 運轉於數據報模式下。連接前,調用 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();
    ....
}
					

在數據報模式下, QSctpSocket 為每個通道獨立履行數據報緩衝。可以將數據報隊列到當前通道的緩衝通過調用 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 ().

QNetworkDatagram QSctpSocket:: readDatagram ()

從當前讀取通道緩衝讀取數據報,並返迴它按 QNetworkDatagram 對象,除發送者的主機地址和端口外。若可能,此函數還會試著確定數據報的目的地地址、端口及接待時的跳躍計數。

當故障時,返迴 QNetworkDatagram 報告 無效 .

另請參閱 writeDatagram (), isInDatagramMode (),和 currentReadChannel ().

[override virtual protected] qint64 QSctpSocket:: readLineData ( char * data , qint64 maxlen )

重實現自 QAbstractSocket::readLineData ().

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 ().