QSctpSocket 類提供 SCTP (流控製傳輸協議) 套接字。 更多...
| 頭: | #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 是方便子類化的 QTcpSocket 允許基於 SCTP 模擬 TCP 數據流,或為可靠數據報服務建立 SCTP 連接。
QSctpSocket 可以運轉於 2 種可能模式之一:
要設置連續字節流模式,實例化 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 對象按狀態
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 ().