QWebSocketServer Class
WebSocketベースのサーバーを実装します。詳細...
ヘッダ | #include <QWebSocketServer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS WebSockets) target_link_libraries(mytarget PRIVATE Qt6::WebSockets) |
qmake: | QT += websockets |
継承: | 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 |
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 |
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) |
void | setProxy(const QNetworkProxy &networkProxy) |
void | setServerName(const QString &serverName) |
bool | setSocketDescriptor(qintptr socketDescriptor) |
void | setSslConfiguration(const QSslConfiguration &sslConfiguration) |
(since 6.4) void | setSupportedSubprotocols(const QStringList &protocols) |
qintptr | socketDescriptor() const |
QSslConfiguration | sslConfiguration() const |
(since 6.4) QStringList | supportedSubprotocols() const |
QList<QWebSocketProtocol::Version> | supportedVersions() const |
シグナル
void | acceptError(QAbstractSocket::SocketError socketError) |
(since 6.2) void | alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
(since 6.2) void | alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
void | closed() |
(since 6.2) void | handshakeInterruptedOnError(const QSslError &error) |
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) |
詳細説明
QWebSocketServer はQTcpServer をモデルにしており、同じように動作します。したがって、QTcpServer の使い方を知っていれば、QWebSocketServer の使い方を知っていることになります。このクラスは、着信する WebSocket 接続を受け付けることができます。ポートを指定することも、QWebSocketServer に自動的に選択させることもできます。特定のアドレスでリッスンすることも、すべてのマシンのアドレスでリッスンすることもできます。listen() を呼び出すと、サーバーは着信接続をリッスンします。
newConnection() シグナルは、クライアントがサーバに接続するたびに発行されます。nextPendingConnection() を呼び出すと、保留中の接続がQWebSocket に接続されたことになる。この関数は、クライアントとの通信に使用できるQAbstractSocket::ConnectedState のQWebSocket へのポインタを返します。
エラーが発生した場合、serverError() はエラーのタイプを返し、errorString() を呼び出すと、何が発生したかを人間が読める形で説明することができる。
接続をリッスンしている場合、サーバーがリッスンしているアドレスとポートは、serverAddress() およびserverPort() として取得できます。
close() を呼び出すと、QWebSocketServer は着信接続のリッスンを停止します。
QWebSocketServer は現在WebSocket Extensions をサポートしていません。
注意: 自己署名証明書を使用している場合、Firefox のバグ 594502によって安全な WebSocket サーバーに接続できません。この問題を回避するには、まずHTTPSを使用して安全なWebSocketサーバーをブラウズします。FireFoxは証明書が無効であることを示します。ここから、証明書を例外に追加することができます。これで、セキュアなWebSocket接続が機能するようになります。
QWebSocketServerは、RFC 6455で概説されているWebSocketプロトコルのバージョン13のみをサポートしています。
サービス拒否を回避するため、デフォルトの接続ハンドシェイクタイムアウトは 10 秒です。これはsetHandshakeTimeout() を使用してカスタマイズできます。
WebSocket Server ExampleおよびQWebSocketも参照 。
メンバー・タイプのドキュメント
enum QWebSocketServer::SslMode
サーバが wss (SecureMode) と ws (NonSecureMode) のどちらで動作するかを示す。
定数 | 値 | 説明 |
---|---|---|
QWebSocketServer::SecureMode | 0 | サーバがセキュアモードで動作している (wss 経由) |
QWebSocketServer::NonSecureMode | 1 | サーバは非セキュアモード(ws経由)で動作します。 |
メンバー関数ドキュメント
[explicit]
QWebSocketServer::QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent = nullptr)
与えられたserverName で新しい QWebSocketServer を構築します。serverName は HTTP ハンドシェイクフェーズでサーバを識別するために使用されます。この場合、サーバ名はクライアントに送信されません。secureMode パラメータは、サーバが wss (SecureMode) と ws (NonSecureMode) のどちらで動作するかを示します。
parent は コンストラクタに渡されます。QObject
[override virtual noexcept]
QWebSocketServer::~QWebSocketServer()
QWebSocketServer オブジェクトを破棄する。サーバーが接続をリッスンしている場合、ソケットは自動的に閉じられる。まだキューに入っているクライアントQWebSocketはすべて閉じられ、削除される。
close()も参照のこと 。
[signal]
void QWebSocketServer::acceptError(QAbstractSocket::SocketError socketError)
このシグナルは、新規接続の受け入れ時にエラーが発生した場合に発行される。socketError パラメータには、発生したエラーのタイプが記述される。
pauseAccepting() およびresumeAccepting()も参照のこと 。
[signal, since 6.2]
void QWebSocketServer::alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QWebSocketServer level 、アラートが致命的なものなのか警告なのかを伝える。 は、アラートが送信された理由を説明するコードである。アラートメッセージのテキストによる説明がある場合は、 。type description
注意: このシグナルは主に情報提供とデバッグのためのもので、アプリケーションで処理する必要はありません。アラートが致命的であった場合、基礎となるバックエンドはそれを処理し、接続を閉じます。
注意: 全てのバックエンドがこの機能をサポートしているわけではありません。
この関数は Qt 6.2 で導入されました。
alertSent()、QSsl::AlertLevel 、QSsl::AlertTypeも参照してください 。
[signal, since 6.2]
void QWebSocketServer::alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QWebSocketServer level 、警告か致命的エラーかを記述する。 、警告メッセージのコードを与える。アラートメッセージのテキストによる説明がある場合は、 。type description
注意: このシグナルはほとんどが情報提供であり、デバッグ目的で使用することができます。
注意: すべてのバックエンドがこの機能をサポートしているわけではありません。
この関数は Qt 6.2 で導入されました。
alertReceived()、QSsl::AlertLevel 、QSsl::AlertTypeも参照してください 。
void QWebSocketServer::close()
サーバを閉じる。サーバは着信接続をリッスンしなくなる。
[signal]
void QWebSocketServer::closed()
このシグナルは、サーバーが接続を閉じたときに発せられる。
close()も参照 。
QWebSocketProtocol::CloseCode QWebSocketServer::error() const
最後に発生したエラーのエラーコードを返す。エラーが発生しなかった場合は、QWebSocketProtocol::CloseCodeNormal が返される。
errorString()も参照のこと 。
QString QWebSocketServer::errorString() const
最後に発生したエラーについて、人間が読める説明を返す。エラーが発生しなかった場合は、空の文字列が返されます。
serverError()も参照 。
void QWebSocketServer::handleConnection(QTcpSocket *socket) const
tcpsocket をウェブソケットにアップグレードする。
QWebSocketServer オブジェクトがソケットオブジェクトの所有権を持ち、適切なときに削除する。
[signal, since 6.2]
void QWebSocketServer::handshakeInterruptedOnError(const QSslError &error)
QWebSocketServer 証明書検証 が見つかり、かつ で早期エラー報告が有効になっている場合、このシグナルを発します。error QSslConfiguration
この関数は Qt 6.2 で導入されました。
sslErrors() およびQSslConfiguration::setHandshakeMustInterruptOnError()も参照してください 。
std::chrono::milliseconds QWebSocketServer::handshakeTimeout() const
新規接続のハンドシェイクタイムアウトをミリ秒単位で返します。
デフォルトは 10 秒。ピアがハンドシェイクの完了にそれ以上の時間をかけた場合、その接続は切断されます。
setHandshakeTimeout() およびhandshakeTimeoutMS()も参照 。
int QWebSocketServer::handshakeTimeoutMS() const
新規接続のハンドシェイクタイムアウトをミリ秒単位で返します。
デフォルトは 10 秒。ピアがハンドシェイクの完了にそれ以上の時間をかけた場合、その接続は切断されます。
setHandshakeTimeout() およびhandshakeTimeout()も参照 。
bool QWebSocketServer::hasPendingConnections() const
サーバーに保留中の接続がある場合はtrueを返し、そうでない場合はfalseを返す。
nextPendingConnection() およびsetMaxPendingConnections()も参照 。
bool QWebSocketServer::isListening() const
サーバーが現在着信接続をリッスンしている場合はtrueを返し、そうでない場合はfalseを返す。リスニングに失敗した場合は、error() がその理由を返す。
bool QWebSocketServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
アドレスaddress 、ポートport で着信接続をリッスンするようにサーバに指示する。port が 0 の場合、ポートは自動的に選択されます。address がQHostAddress::Any の場合、サーバはすべてのネットワーク・インタフェースを listen します。
成功するとtrueを返し、失敗するとfalseを返します。
isListening()も参照 。
int QWebSocketServer::maxPendingConnections() const
保留中の接続の最大数を返します。デフォルトは 30 である。
setMaxPendingConnections() およびhasPendingConnections()も参照 。
[signal]
void QWebSocketServer::newConnection()
このシグナルは、新しい接続が利用可能になるたびに発せられる。
hasPendingConnections() およびnextPendingConnection()も参照のこと 。
[virtual]
QWebSocket *QWebSocketServer::nextPendingConnection()
QWebSocket QWebSocketServer は、返された オブジェクトの所有権を持たない。オブジェクトが使用されなくなったときに明示的に削除するかどうかは、呼び出し側次第です。そうしないと、メモリ・リークが発生します。保留中の接続がないときにこの関数が呼び出されると、nullptrが返されます。QWebSocket
注意: 返されたQWebSocket オブジェクトは、他のスレッドから使用することはできません。
hasPendingConnections()も参照のこと 。
[signal]
void QWebSocketServer::originAuthenticationRequired(QWebSocketCorsAuthenticator *authenticator)
このシグナルは、新しい接続が要求されたときに発せられる。このシグナルに接続されたスロットは、オリジン(origin()コールで決定できる)がauthenticator オブジェクトで(setAllowed()を発行することで)許可されているかどうかを示す必要がある。
このシグナルにスロットが接続されていない場合、デフォルトですべてのオリジンが許可される。
注意: QueuedConnectionを使用してこのシグナルに接続することはできません。
void QWebSocketServer::pauseAccepting()
新しい接続の着信を一時停止する。キューに入れられた接続はキューに残される。
resumeAccepting()も参照のこと 。
[signal]
void QWebSocketServer::peerVerifyError(const QSslError &error)
QWebSocketServer は、SSL ハンドシェイクの間、暗号化が確立する前にこのシグナルを何度か発して、相手の ID を確立する際にエラーが発生したことを示すことができる。 は通常、 がピアを安全に識別できないことを示す。error QWebSocketServer
このシグナルは、何か問題が発生したときに、その兆候を早期に示してくれる。このシグナルに接続することで、ハンドシェイクが完了する前に、接続されたスロットの内部から手動で接続を切断することを選択できる。何もアクションを起こさなければ、QWebSocketServer はQWebSocketServer::sslErrors() の発信に進む。
sslErrors()も参照のこと 。
[signal]
void QWebSocketServer::preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
QWebSocketServer は PSK 暗号スイートとネゴシエートするときにこのシグナルを発するので、 PSK 認証が必要になる。
PSKを使う場合、クライアントはSSLハンドシェイクを続けるために、有効なIDと有効な事前共有鍵をサーバーに送らなければなりません。アプリケーションはこのシグナルに接続されたスロットに、渡されたauthenticator オブジェクトを必要に応じて入力することで、この情報を提供することができます。
注意: このシグナルを無視したり、必要な認証情報を提供しなかったりすると、ハンドシェイクが失敗し、接続が中断されます。
注意 :authenticator オブジェクトはソケットが所有するので、アプリケーションから削除してはならない。
QSslPreSharedKeyAuthenticator とQSslSocket::preSharedKeyAuthenticationRequired()も参照のこと 。
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()も参照のこと 。
[signal]
void QWebSocketServer::serverError(QWebSocketProtocol::CloseCode closeCode)
このシグナルは、WebSocket 接続のセットアップ中にエラーが発生した場合に発行されます。closeCode パラメータには、発生したエラーのタイプを記述します。
errorString()も参照してください 。
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 など) を渡します。
handshakeTimeout() およびhandshakeTimeoutMS()も参照 。
void QWebSocketServer::setHandshakeTimeout(int msec)
これはオーバーロードされた関数である。
void QWebSocketServer::setMaxPendingConnections(int numConnections)
numConnections WebSocketServer は、 () が呼び出される前に、 を超える着信接続を受け付けない。デフォルトでは、保留中の接続数の上限は30である。nextPendingConnection numConnections
QWebSocketServer 最大接続数に達すると、 close コードとともに () シグナルが発行されます。WebSocket のハンドシェイクは失敗し、ソケットはクローズされる。QWebSocketProtocol::CloseCodeAbnormalDisconnection error
maxPendingConnections() およびhasPendingConnections()も参照 。
void QWebSocketServer::setProxy(const QNetworkProxy &networkProxy)
このサーバの明示的なネットワーク・プロキシをnetworkProxy に設定する。
プロキシの使用を無効にするには、QNetworkProxy::NoProxy プロキシ・タイプを使用します:
server->setProxy(QNetworkProxy::NoProxy);
proxy()も参照 。
void QWebSocketServer::setServerName(const QString &serverName)
HTTPハンドシェークフェーズで使用されるサーバ名を、指定されたserverName に設定します。serverName この場合、空のサーバ名がクライアントに送られます。既に接続しているクライアントにはこの変更は通知されず、 新たに接続したクライアントにのみこの新しい名前が通知されます。
serverName()も参照のこと 。
bool QWebSocketServer::setSocketDescriptor(qintptr socketDescriptor)
このサーバがsocketDescriptor への着信接続をリスンする際に使用するソケットディスクリプタを設定する。
ソケットの設定に成功した場合は true を返し、失敗した場合は false を返す。ソケットはリッスン中であると仮定される。
socketDescriptor() およびisListening()も参照 。
void QWebSocketServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)
QWebSocketServer の SSL 構成をsslConfiguration に設定する。QWebSocketServer が非セキュアモード (QWebSocketServer::NonSecureMode) で実行されている場合、このメソッドは効果を持たない。
sslConfiguration() およびSslModeも参照のこと 。
[since 6.4]
void QWebSocketServer::setSupportedSubprotocols(const QStringList &protocols)
サーバがサポートしているプロトコルのリストをprotocols に設定します。
この関数は Qt 6.4 で導入されました。
supportedSubprotocols()も参照してください 。
qintptr QWebSocketServer::socketDescriptor() const
サーバが着信指示を待ち受けるために使用するネイティブソケットディスクリプタを返す。サーバがQNetworkProxy を使用している場合、返されたディスクリプタはネイティブソケット関数で使用できないかもしれない。
setSocketDescriptor() およびisListening()も参照のこと 。
QSslConfiguration QWebSocketServer::sslConfiguration() const
QWebSocketServerサーバがセキュアモードで動作していない場合 (QWebSocketServer::SecureMode)、このメソッドはQSslConfiguration::defaultConfiguration() を返す。
setSslConfiguration()、SslMode 、およびQSslConfiguration::defaultConfiguration()も参照 。
[signal]
void QWebSocketServer::sslErrors(const QList<QSslError> &errors)
QWebSocketServer は、SSL ハンドシェイクの後にこのシグナルを発して、ピアの ID を確立する間に 1 つ以上のエラーが発生したことを示す。エラーは通常、 がピアを安全に識別できないことを示す。何らかの処置が取られない限り、このシグナルが発せられた後、接続は切断されます。QWebSocketServer
errors には、 がピアの ID を確認できないエラーが 1 つ以上含まれている。QSslSocket
peerVerifyError()も参照のこと 。
[since 6.4]
QStringList QWebSocketServer::supportedSubprotocols() const
サーバがサポートしているプロトコルのリストを返します。
この関数は Qt 6.4 で導入されました。
setSupportedSubprotocols()も参照してください 。
QList<QWebSocketProtocol::Version> QWebSocketServer::supportedVersions() const
このサーバーがサポートしている WebSocket のバージョンの一覧を返します。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.