QWebSocketServer 類

實現基於 WebSocket 的服務器。 更多...

頭: #include <QWebSocketServer>
qmake: QT += websockets
Since: Qt 5.3
繼承: QObject

該類在 Qt 5.3 引入。

公共類型

enum SslMode { SecureMode, NonSecureMode }

公共函數

QWebSocketServer (const QString & serverName , QWebSocketServer::SslMode secureMode , QObject * parent = nullptr)
virtual ~QWebSocketServer () override
void close ()
QWebSocketProtocol::CloseCode error () const
QString errorString () const
void handleConnection (QTcpSocket * socket ) const
std::chrono::milliseconds handshakeTimeout () const
int handshakeTimeoutMS () const
bool hasPendingConnections () const
bool isListening () const
bool listen (const QHostAddress & address = QHostAddress::Any, quint16 port = 0)
int maxPendingConnections () const
qintptr nativeDescriptor () const
virtual QWebSocket * nextPendingConnection ()
void pauseAccepting ()
QNetworkProxy proxy () const
void resumeAccepting ()
QWebSocketServer::SslMode secureMode () const
QHostAddress serverAddress () const
QString serverName () const
quint16 serverPort () const
QUrl serverUrl () const
void setHandshakeTimeout (std::chrono::milliseconds msec )
void setHandshakeTimeout (int msec )
void setMaxPendingConnections (int numConnections )
bool setNativeDescriptor (qintptr socketDescriptor )
void setProxy (const QNetworkProxy & networkProxy )
void setServerName (const QString & serverName )
void setSslConfiguration (const QSslConfiguration & sslConfiguration )
QSslConfiguration sslConfiguration () const
QList<QWebSocketProtocol::Version> supportedVersions () const

信號

void acceptError (QAbstractSocket::SocketError socketError )
void closed ()
void newConnection ()
void originAuthenticationRequired (QWebSocketCorsAuthenticator * authenticator )
void peerVerifyError (const QSslError & error )
void preSharedKeyAuthenticationRequired (QSslPreSharedKeyAuthenticator * authenticator )
void serverError (QWebSocketProtocol::CloseCode closeCode )
void sslErrors (const QList<QSslError> & errors )

詳細描述

它被建模根據 QTcpServer ,且行為相同。因此,若知道如何使用 QTcpServer ,就知道如何使用 QWebSocketServer。此類使之成為可能接受傳入 WebSocket 連接。可以指定端口或讓 QWebSocketServer 自動挑選一個。可以監聽特定地址或所有機器地址。調用 listen () 以讓服務器監聽傳入連接。

The newConnection () 信號然後被發射,每次客戶端連接到服務器時。調用 nextPendingConnection () 以接受待決連接作為已連接 QWebSocket 。函數返迴的指針指嚮 QWebSocket in QAbstractSocket::ConnectedState ,可以用於與客戶端進行通信。

若齣現錯誤, serverError () 返迴錯誤的類型,且 errorString () 可以被調用,以獲得發生什麼的人類可讀描述。

當監聽連接時,服務器正監聽的可用地址和端口為 serverAddress () 和 serverPort ().

調用 close () 使 QWebSocketServer 停止監聽傳入連接。

QWebSocketServer 目前不支持 WebSocket 擴展 and WebSocket 子協議 .

注意: 當與自簽名證書一起工作時, Firefox bug 594502 阻止 Firefox 去連接到安全 WebSocket 服務器。要解決此問題,先瀏覽到安全 WebSocket 服務器使用 HTTPS。FireFox 將指示證書無效。從這裏開始,證書會被添加到異常。在此之後,安全 WebSocket 連接應該工作。

QWebSocketServer 隻支持第 13 版的 WebSocket 協議, 如提綱於 RFC 6455 .

為避免拒絕服務,默認連接握手超時為 10 秒,還可以定製使用 setHandshakeTimeout ().

另請參閱 WebSocket 服務器範例 and QWebSocket .

成員類型文檔編製

enum QWebSocketServer:: SslMode

指示服務器操作是通過 wss (SecureMode) 還是通過 ws (NonSecureMode)

常量 描述
QWebSocketServer::SecureMode 0 服務器運轉於安全模式下 (通過 wss)
QWebSocketServer::NonSecureMode 1 服務器運轉於非安全模式下 (通過 wss)

成員函數文檔編製

QWebSocketServer:: QWebSocketServer (const QString & serverName , QWebSocketServer::SslMode secureMode , QObject * parent = nullptr)

構造新 QWebSocketServer 采用給定 serverName serverName 將在 HTTP 握手階段被用於標識服務器。它可以為空,在這種情況下,不會把服務器名稱發送給客戶端。 secureMode 參數指示服務器操作是通過 wss ( SecureMode ) 或通過 ws ( NonSecureMode ).

parent 被傳遞給 QObject 構造函數。

[signal] void QWebSocketServer:: acceptError ( QAbstractSocket::SocketError socketError )

此信號發射,當承兌的新連接造成錯誤時。 socketError 參數描述齣現錯誤的類型。

另請參閱 pauseAccepting () 和 resumeAccepting ().

[signal] void QWebSocketServer:: closed ()

此信號被發射當服務器關閉其連接時。

另請參閱 close ().

[signal] void QWebSocketServer:: newConnection ()

此信號發射,每有當新連接可用時。

另請參閱 hasPendingConnections () 和 nextPendingConnection ().

[signal] void QWebSocketServer:: originAuthenticationRequired ( QWebSocketCorsAuthenticator * authenticator )

此信號被發射當請求新連接時。連接到此信號的槽應該指示是否允許來源 (可以通過調用 origin() 來確定) 在 authenticator 對象 (通過發齣 setAllowed() ).

若沒有槽連接到此信號,默認接受所有來源。

注意: 使用 QueuedConnection 連接到此信號是不可能的,因為連接將始終成功。

[signal] void QWebSocketServer:: peerVerifyError (const QSslError & error )

QWebSocketServer 可以在 SSL 握手期間多次發射此信號,在建立加密之前,以指示當建立對等方的標識時有發生錯誤。 error 通常指示 QWebSocketServer 無法安全標識對等方。

此信號為您提供早期指示當齣錯時。通過連接到此信號,可以手動選擇在握手完成之前從連接槽內拆毀連接。若不采取行動, QWebSocketServer 將繼續進行以發射 QWebSocketServer::sslErrors ().

另請參閱 sslErrors ().

[signal] void QWebSocketServer:: preSharedKeyAuthenticationRequired ( QSslPreSharedKeyAuthenticator * authenticator )

QWebSocketServer 發射此信號當它協商 PSK (預共享密鑰) 密碼套件時,因此接著需要 PSK 身份驗證。

當使用 PSK 時,客戶端必須嚮服務器發送有效標識和有效 PSK (預共享密鑰) 以便 SSL 握手得以繼續。應用程序可以在此信號連接的槽中提供此信息,通過填入傳遞的 authenticator 對象根據需要。

注意: 忽略此信號或未能提供要求證書,將導緻握手失敗,因此連接將被中止。

注意: The authenticator 對象由套接字所擁有且不能被刪除通過應用程序。

該函數在 Qt 5.8 引入。

另請參閱 QSslPreSharedKeyAuthenticator and QSslSocket::preSharedKeyAuthenticationRequired ().

[signal] void QWebSocketServer:: serverError ( QWebSocketProtocol::CloseCode closeCode )

此信號被發射,當設置 WebSocket 連接期間齣現錯誤時。 closeCode 參數描述齣現錯誤的類型

另請參閱 errorString ().

[signal] void QWebSocketServer:: sslErrors (const QList < QSslError > & errors )

QWebSocketServer 發射此信號在 SSL 握手之後以指示當建立對等方標識時有發生一個或多個錯誤。錯誤通常指示 QWebSocketServer 無法安全地識彆對等方。除非采取任何行動,連接將被丟棄在此信號被發射之後。

errors 包含一個或多個錯誤阻止 QSslSocket 驗證對等方身份。

另請參閱 peerVerifyError ().

[override virtual] QWebSocketServer:: ~QWebSocketServer ()

銷毀 QWebSocketServer 對象。若服務器正在監聽連接,套接字將自動關閉。任何客戶端 QWebSocket 仍在隊列的將被關閉並刪除。

另請參閱 close ().

void QWebSocketServer:: close ()

關閉服務器。服務器將不再監聽傳入連接。

QWebSocketProtocol::CloseCode QWebSocketServer:: error () const

返迴最後發生錯誤的錯誤代碼。若沒有發生錯誤, QWebSocketProtocol::CloseCodeNormal 被返迴。

另請參閱 errorString ().

QString QWebSocketServer:: errorString () const

返迴人類可讀的最後發生的錯誤的描述。若未發生錯誤,返迴空字符串。

另請參閱 serverError ().

void QWebSocketServer:: handleConnection ( QTcpSocket * socket ) const

升級 TCP socket 到 WebSocket。

The QWebSocketServer 對象將擁有套接字對象的所有權,並在適當時刪除它。

該函數在 Qt 5.9 引入。

std::chrono::milliseconds QWebSocketServer:: handshakeTimeout () const

返迴新連接的握手超時 (以毫秒為單位)。

默認為 10 秒。若對等方使用更多的時間完成握手,其連接會被關閉。

該函數在 Qt 5.14 引入。

另請參閱 setHandshakeTimeout () 和 handshakeTimeoutMS ().

int QWebSocketServer:: handshakeTimeoutMS () const

返迴新連接的握手超時 (以毫秒為單位)。

默認為 10 秒。若對等方使用更多的時間完成握手,其連接會被關閉。

該函數在 Qt 5.14 引入。

另請參閱 setHandshakeTimeout () 和 handshakeTimeout ().

bool QWebSocketServer:: hasPendingConnections () const

返迴 true 若服務器有待決連接;否則返迴 false。

另請參閱 nextPendingConnection () 和 setMaxPendingConnections ().

bool QWebSocketServer:: isListening () const

返迴 true 若服務器目前在監聽傳入連接;否則返迴 false。若監聽失敗, error () 將返迴原因。

另請參閱 listen () 和 error ().

bool QWebSocketServer:: listen (const QHostAddress & address = QHostAddress::Any, quint16 port = 0)

告訴服務器去監聽傳入連接按地址 address 和端口 port 。若 port 為 0,自動選取端口。若 address is QHostAddress::Any ,服務器將監聽所有網絡接口。

返迴 true 當成功時;否則返迴 false。

另請參閱 isListening ().

int QWebSocketServer:: maxPendingConnections () const

返迴最大待決已接受連接數。默認為 30。

另請參閱 setMaxPendingConnections () 和 hasPendingConnections ().

qintptr QWebSocketServer:: nativeDescriptor () const

返迴服務器用於監聽傳入指令的本機套接字描述符,或 -1 若服務器未監聽。若服務器正在使用 QNetworkProxy ,返迴的描述符可能不能用於本機套接字函數。

該函數在 Qt 5.12 引入。

另請參閱 setNativeDescriptor () 和 isListening ().

[虛擬] QWebSocket *QWebSocketServer:: nextPendingConnection ()

返迴下一待決連接作為連接的 QWebSocket 對象。 QWebSocketServer 不擁有所有權對於返迴的 QWebSocket 對象。直到調用者明確刪除對象,當它不再被使用時,否則會發生內存泄漏。返迴 nullptr,若在沒有待決連接時調用此函數。

注意:返迴的 QWebSocket 對象不可以用於其它綫程。

另請參閱 hasPendingConnections ().

void QWebSocketServer:: pauseAccepting ()

暫停傳入新連接。排隊連接將保留在隊列中。

另請參閱 resumeAccepting ().

QNetworkProxy QWebSocketServer:: proxy () const

返迴此服務器的網絡代理。默認情況下 QNetworkProxy::DefaultProxy 被使用。

另請參閱 setProxy ().

void QWebSocketServer:: resumeAccepting ()

再繼續接受新連接。

另請參閱 pauseAccepting ().

QWebSocketServer::SslMode QWebSocketServer:: secureMode () const

返迴服務器運行所處的安全模式。

另請參閱 QWebSocketServer () 和 SslMode .

QHostAddress QWebSocketServer:: serverAddress () const

返迴服務器的地址,若服務器正在監聽連接;否則返迴 QHostAddress::Null .

另請參閱 serverPort () 和 listen ().

QString QWebSocketServer:: serverName () const

返迴在 HTTP 握手階段使用的服務器名稱。

另請參閱 setServerName ().

quint16 QWebSocketServer:: serverPort () const

返迴服務器端口,若服務器正監聽連接;否則返迴 0。

另請參閱 serverAddress () 和 listen ().

QUrl QWebSocketServer:: serverUrl () const

返迴客戶端可以用來連接到此服務器的 URL,若服務器正在監聽連接。否則,返迴無效 URL。

另請參閱 serverPort (), serverAddress (),和 listen ().

void QWebSocketServer:: setHandshakeTimeout ( std::chrono::milliseconds msec )

把新連接的握手超時設為 msec 毫秒。

默認情況下,這被設為 10 秒。若對等方使用更多時間去完成握手,其連接就會被關閉。可以傳遞負值 (如 -1) 以禁用超時。

該函數在 Qt 5.14 引入。

另請參閱 handshakeTimeout () 和 handshakeTimeoutMS ().

void QWebSocketServer:: setHandshakeTimeout ( int msec )

這是重載函數。

void QWebSocketServer:: setMaxPendingConnections ( int numConnections )

把最大待決接受連接數設為 numConnections . WebSocketServer 將接受不超過 numConnections 傳入連接先於 nextPendingConnection () 被調用。默認情況下,限製為 30 個待決連接。

QWebSocketServer 將發射 error () 信號采用 QWebSocketProtocol::CloseCodeAbnormalDisconnection 關閉代碼當達到最大連接數時。WebSocket 握手將失敗且套接字會被關閉。

另請參閱 maxPendingConnections () 和 hasPendingConnections ().

bool QWebSocketServer:: setNativeDescriptor ( qintptr socketDescriptor )

把此服務器在監聽傳入連接時應該使用的套接字描述符設為 socketDescriptor .

返迴 true,若套接字設置成功;否則返迴 false。假定套接字處於監聽狀態。

該函數在 Qt 5.12 引入。

另請參閱 nativeDescriptor () 和 isListening ().

void QWebSocketServer:: setProxy (const QNetworkProxy & networkProxy )

把此服務器的顯式網絡代理設為 networkProxy .

要禁用代理的使用,使用 QNetworkProxy::NoProxy 代理類型:

server->setProxy(QNetworkProxy::NoProxy);
					

另請參閱 proxy ().

void QWebSocketServer:: setServerName (const QString & serverName )

把 HTTP 握手階段將使用的服務器名稱設為給定 serverName serverName 可以為空,在這種情況下,將嚮客戶端發送空服務器名稱。現有已連接客戶端不會被通知對於此改變,僅新近連接客戶端會見到此新名稱。

另請參閱 serverName ().

void QWebSocketServer:: setSslConfiguration (const QSslConfiguration & sslConfiguration )

設置 SSL 配置為 QWebSocketServer to sslConfiguration 。此方法不起作用若 QWebSocketServer 運行在非安全模式下 ( QWebSocketServer::NonSecureMode ).

另請參閱 sslConfiguration () 和 SslMode .

QSslConfiguration QWebSocketServer:: sslConfiguration () const

返迴 SSL 配置使用通過 QWebSocketServer 。若服務器未運行在安全模式下 ( QWebSocketServer::SecureMode ),此方法返迴 QSslConfiguration::defaultConfiguration ().

另請參閱 setSslConfiguration (), SslMode ,和 QSslConfiguration::defaultConfiguration ().

QList < QWebSocketProtocol::Version > QWebSocketServer:: supportedVersions () const

返迴此服務器支持的 WebSocket 版本列錶。