實現交談 WebSocket 協議的 TCP 套接字。 更多...
| 頭: | #include <QWebSocket> |
| qmake: | QT += websockets |
| Since: | Qt 5.3 |
| 繼承: | QObject |
| QWebSocket (const QString & origin = QString(), QWebSocketProtocol::Version version = QWebSocketProtocol::VersionLatest, QObject * parent = nullptr) | |
| virtual | ~QWebSocket () override |
| void | abort () |
| qint64 | bytesToWrite () const |
| QWebSocketProtocol::CloseCode | closeCode () const |
| QString | closeReason () const |
| QAbstractSocket::SocketError | error () const |
| QString | errorString () const |
| bool | flush () |
| void | ignoreSslErrors (const QList<QSslError> & errors ) |
| bool | isValid () const |
| QHostAddress | localAddress () const |
| quint16 | localPort () const |
| const QMaskGenerator * | maskGenerator () const |
| QString | origin () const |
| QAbstractSocket::PauseModes | pauseMode () const |
| QHostAddress | peerAddress () const |
| QString | peerName () const |
| quint16 | peerPort () const |
| QNetworkProxy | proxy () const |
| qint64 | readBufferSize () const |
| QNetworkRequest | request () const |
| QUrl | requestUrl () const |
| QString | resourceName () const |
| void | resume () |
| qint64 | sendBinaryMessage (const QByteArray & data ) |
| qint64 | sendTextMessage (const QString & message ) |
| void | setMaskGenerator (const QMaskGenerator * maskGenerator ) |
| void | setPauseMode (QAbstractSocket::PauseModes pauseMode ) |
| void | setProxy (const QNetworkProxy & networkProxy ) |
| void | setReadBufferSize (qint64 size ) |
| void | setSslConfiguration (const QSslConfiguration & sslConfiguration ) |
| QSslConfiguration | sslConfiguration () const |
| QAbstractSocket::SocketState | state () const |
| QWebSocketProtocol::Version | version () const |
| void | close (QWebSocketProtocol::CloseCode closeCode = QWebSocketProtocol::CloseCodeNormal, const QString & reason = QString()) |
| void | ignoreSslErrors () |
| void | open (const QUrl & url ) |
| void | open (const QNetworkRequest & request ) |
| void | ping (const QByteArray & payload = QByteArray()) |
| void | aboutToClose () |
| void | binaryFrameReceived (const QByteArray & frame , bool isLastFrame ) |
| void | binaryMessageReceived (const QByteArray & message ) |
| void | bytesWritten (qint64 bytes ) |
| void | connected () |
| void | disconnected () |
| void | error (QAbstractSocket::SocketError error ) |
| void | pong (quint64 elapsedTime , const QByteArray & payload ) |
| void | preSharedKeyAuthenticationRequired (QSslPreSharedKeyAuthenticator * authenticator ) |
| void | proxyAuthenticationRequired (const QNetworkProxy & proxy , QAuthenticator * authenticator ) |
| void | readChannelFinished () |
| void | sslErrors (const QList<QSslError> & errors ) |
| void | stateChanged (QAbstractSocket::SocketState state ) |
| void | textFrameReceived (const QString & frame , bool isLastFrame ) |
| void | textMessageReceived (const QString & message ) |
| const QMetaObject | staticMetaObject |
實現交談 WebSocket 協議的 TCP 套接字。
WebSocket 是通過單 TCP 連接提供全雙工通信通道的 Web 技術。WebSocket 協議由 IETF 標準化為 RFC 6455 in 2011. QWebSocket can both be used in a client application and server application.
此類被建模後於 QAbstractSocket .
QWebSocket currently does not support WebSocket 擴展 and WebSocket 子協議 .
QWebSocket only supports version 13 of the WebSocket protocol, as outlined in RFC 6455 .
注意: 有些代理不理解某些 HTTP 所用 Header (頭) 在 WebSocket 握手期間。在此情況下,不安全 WebSocket 連接將失敗。緩解此問題的最佳方式是使用 WebSocket 通過安全連接。
警告: 要生成屏蔽,此實現的 WebSocket 使用相當安全的 QRandomGenerator::global ()->generate() 函數。有關良好屏蔽重要性的更多信息,見 黃林順等著的 "和自己交談的樂趣和收益" . The best measure against attacks mentioned in the document above, is to use QWebSocket 通過安全連接 ( wss:// )。一般而言,始終小心不要讓第 3 方腳本訪問 QWebSocket 在應用程序中。
另請參閱 QAbstractSocket , QTcpSocket ,和 QWebSocket 客戶端範例 .
創建新的 QWebSocket 采用給定 origin , version 要使用的協議和 parent .
The origin 的客戶端作為指定在 RFC 6454 。( origin 不需要對於非 Web 瀏覽器客戶端 (見 RFC 6455 ))。 origin 不能包含換行符,否則在握手階段將立即中止連接。
注意: 目前僅 V13 ( RFC 6455 ) 被支持
[override virtual]
QWebSocket::
~QWebSocket
()
銷毀 QWebSocket 。關閉套接字若它仍是打開的,並釋放任何使用資源。
中止當前套接字並重置套接字。不像 close (),此函數立即關閉套接字,丟棄寫緩衝中任何待決數據。
[signal]
void
QWebSocket::
aboutToClose
()
此信號被發射當套接字即將關閉時。連接此信號若在套接字關閉之前有操作需要履行 (如:若單獨緩衝中有數據需要寫入設備)。
另請參閱 close ().
[signal]
void
QWebSocket::
binaryFrameReceived
(const
QByteArray
&
frame
,
bool
isLastFrame
)
此信號被發射每當收到二進製幀。 frame 包含數據和 isLastFrame 指示這是否是完整消息的最後一幀。
此信號可以被用於逐幀處理大消息,而不是等待完整消息的到達。
另請參閱 textFrameReceived ().
[signal]
void
QWebSocket::
binaryMessageReceived
(const
QByteArray
&
message
)
此信號被發射每當收到二進製消息。 message 包含收到的字節。
另請參閱 textMessageReceived ().
返迴等待寫入的字節數。寫入字節當控製迴到事件循環或當 flush () 被調用。
該函數在 Qt 5.12 引入。
另請參閱 flush .
[signal]
void
QWebSocket::
bytesWritten
(
qint64
bytes
)
此信號被發射每當已將數據負載寫入套接字時。 bytes 自變量是在此負載中寫入的設置字節數。
注意: 此信號擁有相同含義,對於安全和非安全 WebSocket。相對於 QSslSocket ,bytesWritten() 纔發射當加密數據被有效寫入時 (見 QSslSocket::encryptedBytesWritten ()).
另請參閱 close ().
[slot]
void
QWebSocket::
close
(
QWebSocketProtocol::CloseCode
closeCode
= QWebSocketProtocol::CloseCodeNormal, const
QString
&
reason
= QString())
優雅地關閉套接字采用給定 closeCode and reason .
刷新寫入緩衝中的任何數據在套接字被關閉之前。 closeCode 是 QWebSocketProtocol::CloseCode 指示關閉的原因,和 reason 更詳細描述關閉的原因。所有控製幀,包括關閉幀,被限製為 125 字節。由於其中 2 字節已被用於 closeCode 最大長度的 reason 是 123!若 reason 超過此限製,它將被截取。
返迴套接字為什麼被關閉的指示代碼。
另請參閱 QWebSocketProtocol::CloseCode and closeReason ().
返迴套接字為什麼被關閉的原因。
另請參閱 closeCode ().
[signal]
void
QWebSocket::
connected
()
被發射當連接成功建立時。連接建立成功當套接字被連接且握手成功時。
另請參閱 open () 和 disconnected ().
[signal]
void
QWebSocket::
disconnected
()
發射當套接字已斷開連接時。
返迴最後發生的錯誤類型
另請參閱 errorString ().
[signal]
void
QWebSocket::
error
(
QAbstractSocket::SocketError
error
)
此信號發射,在齣現錯誤後。 error 參數描述齣現錯誤的類型。
QAbstractSocket::SocketError 不是注冊 Metatype (元類型),因此,對於隊列化連接而言,必須注冊它采用 Q_DECLARE_METATYPE () 和 qRegisterMetaType ().
注意: 信號 error 在此類中被重載。通過使用函數指針句法連接到此信號,Qt 提供用於獲得如此範例展示的函數指針的方便幫助程序:
connect(webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error), [=](QAbstractSocket::SocketError error){ /* ... */ });
另請參閱 error () 和 errorString ().
返迴人類可讀的最後發生的錯誤的描述
另請參閱 error ().
此函數不阻塞且盡可能多地,把內部緩衝寫入到底層網絡套接字。若有寫入任何數據,此函數返迴 true; 否則返迴 false。調用此函數若需要 QWebSocket 立即開始發送緩衝數據。成功寫入的字節數從屬操作係統。在大多數情況下,不需調用此函數,因為 QWebSocket 將開始自動發送數據,一旦控製迴到事件循環。
[slot]
void
QWebSocket::
ignoreSslErrors
()
此槽告訴 QWebSocket 去忽略錯誤在 QWebSocket 的握手階段並繼續連接。若想要繼續連接即使在握手階段發生錯誤,必須調用此槽,或從連接槽到 sslErrors (),或在握手階段之前。若在響應齣錯或握手之前不調用此槽,連接將被丟棄當 sslErrors () 信號已發射。
警告: 確保始終讓用戶審查報告的錯誤通過 sslErrors () 信號,且纔調用此方法 (當用戶確認後繼續進行是 OK 的)。若存在意外錯誤,連接應該被中止。不審查實際錯誤就調用此方法,很可能會給應用程序帶來安全風險。小心使用!
另請參閱 sslErrors (), QSslSocket::ignoreSslErrors (),和 QNetworkReply::ignoreSslErrors ().
這是重載函數。
此方法告訴 QWebSocket 去忽略給齣的錯誤在 errors .
注意,可以在 SSL 錯誤中設置望值證書:例如,若想要連接到使用自簽名證書的服務器,考慮以下片段:
QList<QSslCertificate> cert = QSslCertificate::fromPath(QLatin1String("server-certificate.pem")); QSslError error(QSslError::SelfSignedCertificate, cert.at(0)); QList<QSslError> expectedSslErrors; expectedSslErrors.append(error); QWebSocket socket; socket.ignoreSslErrors(expectedSslErrors); socket.open(QUrl(QStringLiteral("wss://myserver.at.home")));
多次調用此函數將替換先前調用傳入錯誤列錶。可以清零想要忽略的錯誤列錶通過采用空列錶調用此函數。
另請參閱 sslErrors ().
返迴
true
若套接字已讀寫就緒;否則返迴
false
.
返迴本地地址
返迴本地端口
返迴目前使用的掩碼生成器通過此 QWebSocket .
另請參閱 setMaskGenerator ().
[slot]
void
QWebSocket::
open
(const
QUrl
&
url
)
打開 WebSocket 連接使用給定 url .
若 URL 包含 \r\n 換行符,錯誤信號將被發射帶 QAbstractSocket::ConnectionRefusedError 作為錯誤類型。
[slot]
void
QWebSocket::
open
(const
QNetworkRequest
&
request
)
打開 WebSocket 連接使用給定 request .
The request URL 將用於打開 WebSocket 連接。請求中存在的 Header (頭) 將與 WebSocket 握手所需要的頭一起被發送給升級請求服務器。
該函數在 Qt 5.6 引入。
返迴當前來源。
返迴此套接字的暫停模式
另請參閱 setPauseMode ().
返迴對等方地址
返迴對等方名稱
返迴對等方端口
[slot]
void
QWebSocket::
ping
(const
QByteArray
&
payload
= QByteArray())
Ping (乒) 服務器以指示連接仍活著。額外 payload 可以與 Ping 消息一道被發送。
大小對於 payload cannot be bigger than 125. If it is larger, the payload 被裁剪到 125 字節。
另請參閱 pong ().
[signal]
void
QWebSocket::
pong
(
quint64
elapsedTime
, const
QByteArray
&
payload
)
發射當收到先前 Ping (乒) 迴復的 pong (乓) 消息時。 elapsedTime 包含往返時間 (以毫秒為單位) 而 payload 包含與 Ping (乒) 一起發送的可選負載。
另請參閱 ping ().
[signal]
void
QWebSocket::
preSharedKeyAuthenticationRequired
(
QSslPreSharedKeyAuthenticator
*
authenticator
)
此信號被發射若 SSL/TLS 握手協商 PSK (預共享密鑰) 密碼套件時,因此接著需要 PSK 身份驗證。
當使用 PSK 時,客戶端必須嚮服務器發送有效標識和有效 PSK (預共享密鑰) 以便 SSL 握手得以繼續。應用程序可以在此信號連接的槽中提供此信息,通過填入傳遞的 authenticator 對象根據需要。
注意: 忽略此信號或未能提供要求證書,將導緻握手失敗,因此連接將被中止。
注意: The authenticator 對象由 WebSocket 所擁有且不能被刪除通過應用程序。
該函數在 Qt 5.8 引入。
另請參閱 QSslPreSharedKeyAuthenticator and QSslSocket::preSharedKeyAuthenticationRequired ().
返迴目前配置代理
另請參閱 setProxy ().
[signal]
void
QWebSocket::
proxyAuthenticationRequired
(const
QNetworkProxy
&
proxy
,
QAuthenticator
*
authenticator
)
此信號可以被發射當 proxy 要求使用身份驗證。 authenticator 然後可以采用所需的詳細信息填充對象,以允許身份驗證並繼續連接。
注意: 使用 QueuedConnection 去連接到此信號是不可能的,因為連接會失敗,若身份驗證器沒有采新信息被填充,當信號返迴時。
另請參閱 QAuthenticator and QNetworkProxy .
返迴用於套接字的讀取緩衝大小 (以字節為單位)。
另請參閱 setReadBufferSize ().
[signal]
void
QWebSocket::
readChannelFinished
()
此信號被發射當輸入 (讀取) 流在此設備中被關閉。一檢測到正關閉,就會發射它。
另請參閱 close ().
返迴過去 (或將來) 用於打開此套接字的請求。
該函數在 Qt 5.6 引入。
返迴套接字已連接或將要連接的 URL。
返迴目前訪問的資源的名稱。
繼續在套接字中傳輸數據。纔應該使用此方法僅在套接字被設為當通知時暫停且有收到通知之後。目前唯一支持的通知是 sslErrors ()。調用此方法導緻不確定行為若套接字未暫停。
另請參閱 pauseMode () 和 setPauseMode ().
發送給定 data 通過套接字以二進製消息形式,並返迴實際發送的字節數。
另請參閱 sendTextMessage ().
發送給定 message 通過套接字以文本消息形式,並返迴實際發送的字節數。
另請參閱 sendBinaryMessage ().
把用於創建掩碼的生成器設為 maskGenerator 。默認 QWebSocket 生成器可以被重置通過提供 nullptr 。可以隨時改變掩碼生成器即使連接是打開的。
另請參閱 maskGenerator ().
控製當收到通知時是否暫停。 pauseMode 參數指定套接字應該被暫停的條件。
目前唯一支持的通知是 sslErrors ()。若設為 PauseOnSslErrors,套接字數據傳輸將暫停且再次啓用需要明確調用 resume ()。默認情況下,此選項被設為 PauseNever。必須調用此選項在連接到服務器之前,否則它將導緻未定義行為。
另請參閱 pauseMode () 和 resume ().
把代理設為 networkProxy
另請參閱 proxy ().
設置大小為 QWebSocket 的內部讀取緩衝到 size 字節。
若緩衝尺寸被限製到某個大小, QWebSocket 緩衝數據不會超過此大小 (例外:0 緩衝大小,意味著讀取緩衝是無限的,且緩衝所有傳入數據)。這是默認。此選項是有用的,若僅在某時間點讀取數據 (如:在實時流應用程序中),或者,若希望保護套接字,防止接收太多數據 (可能最終導緻應用程序內存不足)。
另請參閱 readBufferSize ().
把套接字的 SSL 配置內容設為 sslConfiguration .
此函數把設置的本地證書、密碼、私鑰及 CA 證書存儲在 sslConfiguration 。設置 SSL (安全套接字層) 狀態相關字段是不可能的。
另請參閱 sslConfiguration ().
返迴套接字的 SSL 配置狀態。套接字的默認 SSL 配置是要使用的默認密碼、默認 CA 證書,非本地私鑰或證書。SSL 配置還包含沒有通知可以隨時改變的字段。
另請參閱 setSslConfiguration ().
[signal]
void
QWebSocket::
sslErrors
(const
QList
<
QSslError
> &
errors
)
QWebSocket 發射此信號在 SSL 握手之後以指示當建立對等方標識時有發生一個或多個錯誤。錯誤通常指示 QWebSocket 無法安全識彆對等方。除非采取任何行動,連接將被丟棄在此信號被發射之後。若想要繼續連接不管有錯誤發生,必須調用 QWebSocket::ignoreSslErrors () 從連接到此信號的槽內。若以後需要訪問錯誤列錶,可以調用 sslErrors() (不帶自變量)。
errors 包含一個或多個錯誤阻止 QWebSocket 驗證對等方身份。
注意: 不可以使用 Qt::QueuedConnection 當連接到此信號時,或調用 QWebSocket::ignoreSslErrors () 沒有起作用。
返迴套接字的當前狀態。
[signal]
void
QWebSocket::
stateChanged
(
QAbstractSocket::SocketState
state
)
此信號發射,每當 QWebSocket 的狀態改變。 state 參數是新狀態。
注意: QAbstractSocket::ConnectedState 被發射在與服務器成功握手之後。
QAbstractSocket::SocketState 不是已注冊 Metatype (元類型),因此對於隊列連接,必須注冊它采用 Q_REGISTER_METATYPE() 和 qRegisterMetaType ().
另請參閱 state ().
[signal]
void
QWebSocket::
textFrameReceived
(const
QString
&
frame
,
bool
isLastFrame
)
此信號被發射每當收到文本幀時。 frame 包含數據和 isLastFrame 指示這是否是完整消息的最後一幀。
此信號可以被用於逐幀處理大消息,而不是等待完整消息的到達。
另請參閱 binaryFrameReceived ().
[signal]
void
QWebSocket::
textMessageReceived
(const
QString
&
message
)
此信號被發射每當收到文本消息時。 message 包含收到的文本。
另請參閱 binaryMessageReceived ().
返迴目前正在使用的套接字版本。