QWebSocket 客戶端


QWebSocket 客戶端

Header: #include<QWebSocket>
qmake: QT += websockets
Inherits: QObject

Public Function

QWebSocket(const QString &origin = QString(),QWebSocketProtocol::Version version = QWebSocketProtocol::VersionLatest, QObject *parent = Q_NULLPTR)

構造函數

virtual ~QWebSocket()

銷毀當前 QWebSocket,如果該 socket 處於打開狀態,則關閉它,並釋放用戶資源。

void abort()

中止當前套接字並重置套接字。 與close()不同,此函數立即關閉套接字,放棄寫入緩沖區中的任何未決數據。

QWebSocketProtocol::CloseCode closeCode() const

返回指示套接字被關閉的原因的代碼。

QString closeReason() const

返回套接字被關閉的原因。

QAbstractSocket::SocketError error() const

返回上次發生的錯誤類型

QString errorString() const

返回發生的最后一個錯誤的可讀描述

bool flush()

此功能盡可能地從內部寫入緩沖區寫入底層網絡套接字,而不會阻塞。 如果有任何數據被寫入,則該函數返回true; 否則返回false。 如果您需要QWebSocket立即開始發送緩沖數據,請調用此函數。 成功寫入的字節數取決於操作系統。 在大多數情況下,您不需要調用此函數,因為一旦控制回到事件循環,QWebSocket就會自動開始發送數據。

void ignoreSslErrors(const QList<QSslError> &errors)

這是一個過載功能。
此方法告訴QWebSocket忽略錯誤中給出的錯誤。
請注意,您可以在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")));

多次調用此函數將替換之前調用中傳遞的錯誤列表。 通過使用空列表調用此函數,可以清除要忽略的錯誤列表。

bool isValid() const

如果套接字准備好讀取和寫入,則返回true; 否則返回false。

QHostAddress localAddress() const

返回本地地址

quint16 localPort() const

返回本地端口

const QMaskGenerator *maskGenerator() const

返回此QWebSocket當前使用的掩碼生成器。

QString origin() const

返回當前的原點。

QAbstractSocket::PauseModes pauseMode() const

返回此套接字的暫停模式

QHostAddress peerAddress() const

返回對等地址

QString peerName() const

返回peerName

quint16 peerPort() const

返回peerport

QNetworkProxy proxy() const

返回當前配置的代理

qint64 readBufferSize() const

返回套接字使用的讀取緩沖區的大小(以字節為單位)。

QNetworkRequest request() const

返回已經或將要用於打開此套接字的請求。

QUrl requestUrl() const

返回套接字連接或將連接到的url。

QString resourceName() const

返回當前訪問的資源的名稱。

void resume()

繼續在套接字上傳輸數據。 只有在套接字已設置為暫停通知並收到通知后才能使用此方法。 目前支持的唯一通知是sslErrors()。 如果套接字未暫停,則調用此方法會導致未定義的行為。

qint64 sendBinaryMessage(const QByteArray &data)

將給定的數據作為二進制消息通過套接字發送,並返回實際發送的字節數。

qint64 sendTextMessage(const QString &message)

將給定的消息作為文本消息通過套接字發送,並返回實際發送的字節數。

void setMaskGenerator(const QMaskGenerator *maskGenerator)

將生成器設置為用於創建掩碼以生成掩碼生成器。 默認的QWebSocket生成器可以通過提供Q_NULLPTR來重置。 即使在連接打開的情況下,掩碼發生器也可以隨時更改。

void setPauseMode(QAbstractSocket::PauseModes pauseMode)

控制是否在收到通知后暫停。 pauseMode參數指定套接字應該暫停的條件。
目前支持的唯一通知是sslErrors()。 如果設置為PauseOnSslErrors,套接字上的數據傳輸將暫停,需要通過調用resume()再次顯式啟用。 默認情況下,該選項設置為PauseNever。 在連接到服務器之前必須調用此選項,否則會導致未定義的行為。

void setProxy(const QNetworkProxy &networkProxy)

將代理設置為networkProxy

void setReadBufferSize(qint64 size)

將QWebSocket內部讀取緩沖區的大小設置為大小字節。
如果緩沖區大小限制在一定的大小,QWebSocket將不會緩沖超過這個大小的數據。 例外情況下,緩沖區大小為0表示讀取緩沖區不受限制,並且所有傳入數據都被緩沖。 這是默認設置。 如果您僅在特定時間點(例如,在實時流應用程序中)讀取數據,或者您想保護套接字免於接收太多數據,這可能最終會導致應用程序用完 的記憶。

void setSslConfiguration(const QSslConfiguration &sslConfiguration)

將套接字的SSL配置設置為sslConfiguration的內容。
該函數將本地證書,密碼,私鑰和CA證書設置為存儲在sslConfiguration中的證書。 無法設置與SSL狀態相關的字段。

QSslConfiguration sslConfiguration() const

返回套接字的SSL配置狀態。 套接字的默認SSL配置是使用默認密碼,默認CA證書,無本地私鑰或證書。 SSL配置還包含可隨時更改的字段,恕不另行通知。

QAbstractSocket::SocketState state() const

返回套接字的當前狀態。

QWebSocketProtocol::Version version() const

返回套接字當前使用的版本。

32 public functions inherited from QObject

Pubilc Slots

void close(QWebSocketProtocol::CloseCode closeCode = QWebSocketProtocol::CloseCodeNormal, const QString &reason = QString())

用給定的closeCode和原因合適地關閉套接字。
寫入緩沖區中的任何數據在套接字關閉前被刷新。 closeCode是一個表示關閉原因的QWebSocketProtocol :: CloseCode,理由更詳細地描述了關閉的原因

void ignoreSslErrors()

這個插槽告訴QWebSocket在QWebSocket握手階段忽略錯誤並繼續連接。 如果即使在握手階段發生錯誤時仍要繼續連接,則必須從連接到sslErrors()的插槽調用此插槽,或者在握手階段之前調用此插槽。 如果您不調用此插槽,無論是對錯誤還是握手之前,都會在sslErrors()信號發出后斷開連接。
警告:務必始終讓用戶檢查由sslErrors()信號報告的錯誤,並且僅在用戶確認進行的操作正常后才調用此方法。 如果有意外的錯誤,連接應該中止。 在不檢查實際錯誤的情況下調用此方法很可能會對您的應用程序造成安全風險。 小心使用它!

void open(const QUrl &url)

使用給定的URL打開WebSocket連接。
如果url包含換行符(\ r \ n),那么錯誤信號將作為錯誤類型與QAbstractSocket :: ConnectionRefusedError一起發出。

void open(const QNetworkRequest &request)

使用給定請求打開WebSocket連接。
請求URL將用於打開WebSocket連接。 請求中出現的標題將在升級請求中發送到服務器,以及websocket握手所需的標題。

void ping(const QByteArray &payload = QByteArray())

ping服務器以表明連接仍然存在。 額外的有效載荷可以沿着ping消息發送。
有效載荷的大小不能大於125.如果它更大,有效載荷將被限制為125字節。

1 public slot inherited from QObject

Signals

void aboutToClose()

這個信號在插座即將關閉時發出。 如果您在套接字關閉之前執行了需要執行的操作(例如,如果數據位於需要寫入設備的單獨緩沖區中),請連接此信號。

void binaryFrameReceived(const QByteArray &frame, bool isLastFrame)

無論何時收到二進制幀,都會發出此信號。 該幀包含數據,isLastFrame指示這是否是完整消息的最后一幀。
該信號可用於逐幀處理較大的消息,而不是等待完整的消息到達。

void binaryMessageReceived(const QByteArray &message)

只要接收到二進制消息,就會發出此信號。 該消息包含接收到的字節。

void bytesWritten(qint64 bytes)

每當數據有效載荷被寫入插座時,就會發出此信號。 bytes參數設置為寫入此有效內容中的字節數。
注意:這個信號對於安全和非安全的WebSocket都具有相同的含義。 與QSslSocket相反,bytesWritten()僅在有效寫入加密數據時才會發出(請參閱QSslSocket :: encryptedBytesWritten())。

void connected()

連接成功建立時發射。 連接套接字並握手成功后,連接成功建立。

void disconnected()

插座斷開時發射。

void error(QAbstractSocket::SocketError error)

該信號在發生錯誤后發出。 錯誤參數描述發生的錯誤類型。
QAbstractSocket :: SocketError不是已注冊的元類型,因此對於排隊連接,您必須使用Q_DECLARE_METATYPE()和qRegisterMetaType()進行注冊。
注意:此類中的信號錯誤超載。 要使用函數指針語法連接到此函數,您必須在靜態轉換中指定信號類型,如下例所示:

 connect(webSocket, static_cast<void(QWebSocket::*)(QAbstractSocket::SocketError)>(&QWebSocket::error),
      [=](QAbstractSocket::SocketError error){ /* ... */ });

void pong(quint64 elapsedTime, const QByteArray &payload)

當收到pong消息以回復先前的ping時發出。 elapsedTime包含往返時間(以毫秒為單位),並且有效內容包含與ping一起發送的可選有效內容。

void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)

如果SSL / TLS握手協商PSK密碼組,則會發出此信號,因此需要PSK身份驗證。
當使用PSK時,客戶端必須向服務器發送一個有效的標識和一個有效的預共享密鑰,以便SSL握手繼續進行。 應用程序可以在連接到此信號的插槽中提供此信息,方法是根據需要填寫已傳遞的身份驗證器對象。
注意:忽略此信號或未能提供所需的憑據將導致握手失敗,從而導致連接中止。
注意:驗證器對象由websocket擁有,不能被應用程序刪除。

void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)

當使用需要驗證的代理服務器時,可以發出此信號。 然后可以使用所需的詳細信息填充驗證器對象,以允許驗證並繼續連接。
注意:無法使用QueuedConnection連接到此信號,因為如果驗證器在信號返回時尚未用新信息填充驗證器,則連接將失敗。

void readChannelFinished()

輸入(讀取)流在此設備中關閉時發出此信號。 一旦檢測到關閉,它就會被釋放。

void sslErrors(const QList<QSslError> &errors)

QWebSocket在SSL握手之后發出此信號以指示在建立對等體的身份時發生了一個或多個錯誤。 這些錯誤通常表明QWebSocket無法安全地識別對等體。 除非采取任何措施,否則在發出此信號后,連接將被丟棄。 如果你想繼續連接,盡管發生了錯誤,你必須在連接到這個信號的槽中調用QWebSocket :: ignoreSslErrors()。 如果稍后需要訪問錯誤列表,則可以調用sslErrors()(不帶參數)。
錯誤包含一個或多個阻止QWebSocket驗證對等身份的錯誤。
注意:連接到此信號時不能使用Qt :: QueuedConnection,或者調用QWebSocket :: ignoreSslErrors()將不起作用。

void stateChanged(QAbstractSocket::SocketState state)

無論何時QWebSocket的狀態改變,都會發出此信號。 狀態參數是新狀態。
注意:QAbstractSocket :: ConnectedState是在與服務器握手成功后發出的。
QAbstractSocket :: SocketState不是已注冊的元類型,因此對於排隊連接,您必須使用Q_REGISTER_METATYPE()和qRegisterMetaType()進行注冊。

void textFrameReceived(const QString &frame, bool isLastFrame)

只要接收到文本幀,就會發出此信號。 該幀包含數據,isLastFrame指示這是否是完整消息的最后一幀。
該信號可用於逐幀處理較大的消息,而不是等待完整的消息到達。

void textMessageReceived(const QString &message)

只要收到短信,就會發出此信號。 該消息包含收到的文本。

2 signals inherited from QObject

ditional Inherited Members

1 property inherited from QObject
1 public variable inherited from QObject
10 static public members inherited from QObject
9 protected functions inherited from QObject
2 protected variables inherited from QObject

Detailed Description


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM