實現基於 WebSocket 的服務器。 更多...
| 頭: | #include <QWebSocketServer> |
| qmake: | QT += websockets |
| Since: | Qt 5.3 |
| 繼承: | QObject |
| enum | SslMode { SecureMode, NonSecureMode } |
| QWebSocketServer (const QString & serverName , SslMode secureMode , QObject * parent = Q_NULLPTR) | |
| virtual | ~QWebSocketServer () |
| 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 |
| virtual QWebSocket * | nextPendingConnection () |
| void | pauseAccepting () |
| QNetworkProxy | proxy () const |
| void | resumeAccepting () |
| SslMode | secureMode () const |
| QHostAddress | serverAddress () const |
| QString | serverName () const |
| quint16 | serverPort () const |
| QUrl | serverUrl () const |
| void | setMaxPendingConnections (int numConnections ) |
| void | setProxy (const QNetworkProxy & networkProxy ) |
| void | setServerName (const QString & serverName ) |
| bool | setSocketDescriptor (int socketDescriptor ) |
| void | setSslConfiguration (const QSslConfiguration & sslConfiguration ) |
| int | socketDescriptor () const |
| 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 ) |
實現基於 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 will be used in the HTTP handshake phase to identify the server. It can be empty, in which case an empty server name will be sent to the client. The secureMode 參數指示服務器操作是通過 wss ( SecureMode ) 或通過 ws ( NonSecureMode ).
parent 被傳遞給 QObject 構造函數。
[虛擬]
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 ().
[signal]
void
QWebSocketServer::
newConnection
()
此信號發射,每有當新連接可用時。
另請參閱 hasPendingConnections () 和 nextPendingConnection ().
[虛擬]
QWebSocket
*QWebSocketServer::
nextPendingConnection
()
返迴下一待決連接作為連接的 QWebSocket 對象。 QWebSocketServer 不擁有所有權對於返迴的 QWebSocket object. It is up to the caller to delete the object explicitly when it will no longer be used, otherwise a memory leak will occur. Q_NULLPTR is returned if this function is called when there are no pending connections.
注意:返迴的 QWebSocket 對象不可以用於其它綫程。
另請參閱 hasPendingConnections ().
[signal]
void
QWebSocketServer::
originAuthenticationRequired
(
QWebSocketCorsAuthenticator
*
authenticator
)
This signal is emitted when a new connection is requested. The slot connected to this signal should indicate whether the origin (which can be determined by the origin () call) is allowed in the 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 ().
把此服務器的顯式網絡代理設為 networkProxy .
要禁用代理的使用,使用 QNetworkProxy::NoProxy 代理類型:
server->setProxy(QNetworkProxy::NoProxy);
另請參閱 proxy ().
把 HTTP 握手階段將使用的服務器名稱設為給定 serverName 。 serverName 可以為空,在這種情況下,將嚮客戶端發送空服務器名稱。現有已連接客戶端不會被通知對於此改變,僅新近連接客戶端會見到此新名稱。
另請參閱 serverName ().
把此服務器在監聽傳入連接時應該使用的套接字描述符設為 socketDescriptor .
返迴 true,若套接字設置成功;否則返迴 false。假定套接字處於監聽狀態。
另請參閱 socketDescriptor () 和 isListening ().
設置 SSL 配置為 QWebSocketServer to sslConfiguration 。此方法不起作用若 QWebSocketServer 運行在非安全模式下 ( QWebSocketServer::NonSecureMode ).
另請參閱 sslConfiguration () 和 SslMode .
返迴服務器用於監聽傳入指令的本機套接字描述符,或 -1 若服務器未監聽。若服務器正在使用 QNetworkProxy ,返迴的描述符可能不能用於本機套接字函數。
另請參閱 setSocketDescriptor () 和 isListening ().
返迴 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 版本列錶。