實現基於 WebSocket 的服務器。 更多...
| 頭: | #include <QWebSocketServer> |
| qmake: | QT += websockets |
| Since: | Qt 5.3 |
| 繼承: | QObject |
| 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 |
| 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 | 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 ) |
| const QMetaObject | staticMetaObject |
實現基於 WebSocket 的服務器。
它被建模根據 QTcpServer ,且行為相同。因此,若知道如何使用 QTcpServer , you know how to use QWebSocketServer . This class makes it possible to accept incoming WebSocket connections. You can specify the port or have QWebSocketServer pick one automatically. You can listen on a specific address or on all the machine's addresses. Call listen () 以讓服務器監聽傳入連接。
The newConnection () 信號然後被發射,每次客戶端連接到服務器時。調用 nextPendingConnection () 以接受待決連接作為已連接 QWebSocket 。函數返迴的指針指嚮 QWebSocket in QAbstractSocket::ConnectedState ,可以用於與客戶端進行通信。
若齣現錯誤, serverError () 返迴錯誤的類型,且 errorString () 可以被調用,以獲得發生什麼的人類可讀描述。
當監聽連接時,服務器正監聽的可用地址和端口為 serverAddress () 和 serverPort ().
調用 close () 使 QWebSocketServer 停止監聽傳入連接。
QWebSocketServer currently does not support WebSocket 擴展 and WebSocket 子協議 .
注意: 當與自簽名證書一起工作時, Firefox bug 594502 阻止 Firefox 去連接到安全 WebSocket 服務器。要解決此問題,先瀏覽到安全 WebSocket 服務器使用 HTTPS。FireFox 將指示證書無效。從這裏開始,證書會被添加到異常。在此之後,安全 WebSocket 連接應該工作。
QWebSocketServer only supports version 13 of the WebSocket protocol, as outlined in RFC 6455 .
另請參閱 WebSocket 服務器範例 and QWebSocket .
指示服務器操作是通過 wss (SecureMode) 還是通過 ws (NonSecureMode)
| 常量 | 值 | 描述 |
|---|---|---|
QWebSocketServer::SecureMode
|
0
|
服務器運轉於安全模式下 (通過 wss) |
QWebSocketServer::NonSecureMode
|
1
|
服務器運轉於非安全模式下 (通過 wss) |
構造新的 QWebSocketServer 采用給定 serverName 。 serverName 將在 HTTP 握手階段被用於標識服務器。它可以為空,在這種情況下,不會把服務器名稱發送給客戶端。 secureMode 參數指示服務器操作是通過 wss ( SecureMode ) 或通過 ws ( NonSecureMode ).
parent 被傳遞給 QObject 構造函數。
[override virtual]
QWebSocketServer::
~QWebSocketServer
()
銷毀 QWebSocketServer 對象。若服務器正在監聽連接,套接字將自動關閉。任何客戶端 QWebSocket 仍在隊列的將被關閉並刪除。
另請參閱 close ().
[signal]
void
QWebSocketServer::
acceptError
(
QAbstractSocket::SocketError
socketError
)
此信號發射,當承兌的新連接造成錯誤時。 socketError 參數描述齣現錯誤的類型。
另請參閱 pauseAccepting () 和 resumeAccepting ().
關閉服務器。服務器將不再監聽傳入連接。
[signal]
void
QWebSocketServer::
closed
()
此信號被發射當服務器關閉其連接時。
另請參閱 close ().
返迴最後發生錯誤的錯誤代碼。若沒有發生錯誤, QWebSocketProtocol::CloseCodeNormal 被返迴。
另請參閱 errorString ().
返迴人類可讀的最後發生的錯誤的描述。若未發生錯誤,返迴空字符串。
另請參閱 serverError ().
升級 TCP socket 到 WebSocket。
The QWebSocketServer 對象將擁有套接字對象的所有權,並在適當時刪除它。
該函數在 Qt 5.9 引入。
返迴 true 若服務器有待決連接;否則返迴 false。
另請參閱 nextPendingConnection () 和 setMaxPendingConnections ().
返迴 true 若服務器目前在監聽傳入連接;否則返迴 false。若監聽失敗, error () 將返迴原因。
告訴服務器去監聽傳入連接按地址 address 和端口 port 。若 port 為 0,自動選取端口。若 address is QHostAddress::Any ,服務器將監聽所有網絡接口。
返迴 true 當成功時;否則返迴 false。
另請參閱 isListening ().
返迴最大待決已接受連接數。默認為 30。
另請參閱 setMaxPendingConnections () 和 hasPendingConnections ().
返迴服務器用於監聽傳入指令的本機套接字描述符,或 -1 若服務器未監聽。若服務器正在使用 QNetworkProxy ,返迴的描述符可能不能用於本機套接字函數。
該函數在 Qt 5.12 引入。
另請參閱 setNativeDescriptor () 和 isListening ().
[signal]
void
QWebSocketServer::
newConnection
()
此信號發射,每有當新連接可用時。
另請參閱 hasPendingConnections () 和 nextPendingConnection ().
[虛擬]
QWebSocket
*QWebSocketServer::
nextPendingConnection
()
返迴下一待決連接作為連接的 QWebSocket 對象。 QWebSocketServer 不擁有所有權對於返迴的 QWebSocket 對象。直到調用者明確刪除對象,當它不再被使用時,否則會發生內存泄漏。返迴 nullptr,若在沒有待決連接時調用此函數。
注意:返迴的 QWebSocket 對象不可以用於其它綫程。
另請參閱 hasPendingConnections ().
[signal]
void
QWebSocketServer::
originAuthenticationRequired
(
QWebSocketCorsAuthenticator
*
authenticator
)
此信號被發射當請求新連接時。連接到此信號的槽應該指示是否允許來源 (可以通過調用 origin() 來確定) 在 authenticator 對象 (通過發齣 setAllowed() ).
若沒有槽連接到此信號,默認接受所有來源。
注意: 使用 QueuedConnection 連接到此信號是不可能的,因為連接將始終成功。
暫停傳入新連接。排隊連接將保留在隊列中。
另請參閱 resumeAccepting ().
[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 ().
返迴此服務器的網絡代理。默認情況下 QNetworkProxy::DefaultProxy 被使用。
另請參閱 setProxy ().
再繼續接受新連接。
另請參閱 pauseAccepting ().
返迴服務器運行所處的安全模式。
另請參閱 QWebSocketServer () 和 SslMode .
返迴服務器的地址,若服務器正在監聽連接;否則返迴 QHostAddress::Null .
另請參閱 serverPort () 和 listen ().
[signal]
void
QWebSocketServer::
serverError
(
QWebSocketProtocol::CloseCode
closeCode
)
此信號被發射,當設置 WebSocket 連接期間齣現錯誤時。 closeCode 參數描述齣現錯誤的類型
另請參閱 errorString ().
返迴在 HTTP 握手階段使用的服務器名稱。
另請參閱 setServerName ().
返迴服務器端口,若服務器正監聽連接;否則返迴 0。
另請參閱 serverAddress () 和 listen ().
返迴客戶端可以用來連接到此服務器的 URL,若服務器正在監聽連接。否則,返迴無效 URL。
另請參閱 serverPort (), serverAddress (),和 listen ().
把最大待決接受連接數設為 numConnections . WebSocketServer 將接受不超過 numConnections 傳入連接先於 nextPendingConnection () 被調用。默認情況下,限製為 30 個待決連接。
QWebSocketServer 將發射 error () 信號采用 QWebSocketProtocol::CloseCodeAbnormalDisconnection 關閉代碼當達到最大連接數時。WebSocket 握手將失敗且套接字會被關閉。
另請參閱 maxPendingConnections () 和 hasPendingConnections ().
把此服務器在監聽傳入連接時應該使用的套接字描述符設為 socketDescriptor .
返迴 true,若套接字設置成功;否則返迴 false。假定套接字處於監聽狀態。
該函數在 Qt 5.12 引入。
另請參閱 nativeDescriptor () 和 isListening ().
把此服務器的顯式網絡代理設為 networkProxy .
要禁用代理的使用,使用 QNetworkProxy::NoProxy 代理類型:
server->setProxy(QNetworkProxy::NoProxy);
另請參閱 proxy ().
把 HTTP 握手階段將使用的服務器名稱設為給定 serverName 。 serverName 可以為空,在這種情況下,將嚮客戶端發送空服務器名稱。現有已連接客戶端不會被通知對於此改變,僅新近連接客戶端會見到此新名稱。
另請參閱 serverName ().
設置 SSL 配置為 QWebSocketServer to sslConfiguration 。此方法不起作用若 QWebSocketServer 運行在非安全模式下 ( QWebSocketServer::NonSecureMode ).
另請參閱 sslConfiguration () 和 SslMode .
返迴 SSL 配置使用通過 QWebSocketServer 。若服務器未運行在安全模式下 ( QWebSocketServer::SecureMode ),此方法返迴 QSslConfiguration::defaultConfiguration ().
另請參閱 setSslConfiguration (), SslMode ,和 QSslConfiguration::defaultConfiguration ().
[signal]
void
QWebSocketServer::
sslErrors
(const
QList
<
QSslError
> &
errors
)
QWebSocketServer 發射此信號在 SSL 握手之後以指示當建立對等方標識時有發生一個或多個錯誤。錯誤通常指示 QWebSocketServer 無法安全地識彆對等方。除非采取任何行動,連接將被丟棄在此信號被發射之後。
errors 包含一個或多個錯誤阻止 QSslSocket 驗證對等方身份。
另請參閱 peerVerifyError ().
返迴此服務器支持的 WebSocket 版本列錶。