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) |
(since 6.11) void | sslErrorsOccurred(QSslSocket *socket, const QList<QSslError> &errors) |
詳細な説明
これはQTcpServer をモデルにしており、動作も同様です。したがって、QTcpServer の使い方を理解していれば、QWebSocketServerの使い方も理解できます。このクラスを使用すると、着信するWebSocket接続を受け入れることが可能になります。ポートを指定することも、QWebSocketServerに自動的に選択させることもできます。 特定のアドレス、あるいはそのマシンのすべてのアドレスでリスニングを行うことができます。サーバーに受信接続を待機させるには、listen() を呼び出します。
その後、クライアントがサーバーに接続するたびに、newConnection() シグナルが発信されます。nextPendingConnection() を呼び出すと、保留中の接続を接続済みのQWebSocket として受け入れられます。この関数は、QAbstractSocket::ConnectedState 内のQWebSocket へのポインタを返し、これを使用してクライアントとの通信を行うことができます。
エラーが発生した場合、serverError() はエラーの種類を返し、errorString() を呼び出すことで、何が起きたかについて人間が理解できる説明を取得できます。
接続を待機している場合、サーバーがリスニングしているアドレスとポートは、serverAddress() およびserverPort() で取得できます。
close() を呼び出すと、QWebSocketServer は着信接続の待機を停止します。
QWebSocketServer は現在、WebSocket 拡張機能をサポートしていません。
注: 自己署名証明書を使用する場合 、Firefoxのバグ594502により、FirefoxがセキュアなWebSocketサーバーに接続できなくなります。この問題を回避するには、まずHTTPSを使用してセキュアなWebSocketサーバーにアクセスしてください。 Firefox は、証明書が無効であることを通知します。この時点で、その証明書を例外リストに追加できます。その後、セキュアな WebSocket 接続が機能するはずです。
QWebSocketServer は、RFC 6455 に規定されている WebSocket プロトコルのバージョン 13 のみをサポートしています。
サービス拒否(DoS)を防ぐため、デフォルトの接続ハンドシェイクタイムアウトは10秒に設定されていますが、setHandshakeTimeout() を使用してこれをカスタマイズできます。
「WebSocket サーバーの例」および「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
TCPのsocket をWebSocketにアップグレードします。
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() はその理由を返します。
listen() およびerror()も参照してください 。
bool QWebSocketServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
サーバーに対し、アドレスaddress およびポートport で着信接続を待機するように指示します。port が 0 の場合、ポートは自動的に選択されます。address がQHostAddress::Any の場合、サーバーはすべてのネットワークインターフェースで接続を待機します。
成功した場合は true を返し、そうでない場合は false を返します。
isListening()も参照してください 。
int QWebSocketServer::maxPendingConnections() const
保留中の受け入れ済み接続の最大数を返します。デフォルトは 30 です。
setMaxPendingConnections() およびhasPendingConnections()も参照してください 。
[signal] void QWebSocketServer::newConnection()
このシグナルは、新しい接続が利用可能になるたびに発信されます。
hasPendingConnections() およびnextPendingConnection()も参照してください 。
[virtual] QWebSocket *QWebSocketServer::nextPendingConnection()
次に処理待ちの接続を、接続済みのQWebSocket オブジェクトとして返します。QWebSocketServer は、返されたQWebSocket オブジェクトの所有権を取得しません。このオブジェクトが不要になった際には、呼び出し側が明示的に削除する必要があります。そうしないと、メモリリークが発生します。処理待ちの接続がない状態でこの関数が呼び出された場合、nullptrが返されます。
注:返された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ハンドシェイク中、暗号化が確立される前に、このシグナルを数回発信し、相手側の身元確認中にエラーが発生したことを示すことがあります。error は通常、QWebSocketServer が相手側を安全に識別できないことを示しています。
このシグナルは、何らかの問題が発生した際の早期の兆候となります。このシグナルに接続することで、ハンドシェイクが完了する前に、接続済みのスロット内から手動で接続を切断することを選択できます。何の措置も講じない場合、QWebSocketServer はQWebSocketServer::sslErrors()の送信に進みます。
sslErrors()も参照してください 。
[signal] void QWebSocketServer::preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
QWebSocketServer PSK暗号スイートのネゴシエーションを行う際にこの信号を発信するため、その後PSK認証が必要となります。
PSKを使用する場合、SSLハンドシェイクを継続するためには、クライアントはサーバーに対して有効な識別情報と有効な事前共有鍵を送信する必要があります。アプリケーションは、このシグナルに接続されたスロット内で、渡された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 は、nextPendingConnection()が呼び出される前に、numConnections 以下の着信接続のみを受け入れます。デフォルトでは、保留中の接続数の制限は30です。
QWebSocketServer 接続数が上限に達すると、QWebSocketProtocol::CloseCodeAbnormalDisconnection のクローズコードを伴うerror()シグナルを発行します。WebSocketのハンドシェイクは失敗し、ソケットは閉じられます。
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
サーバーが着信する指示をリッスンするために使用するネイティブソケット記述子を返します。サーバーがリッスンしていない場合は -1 を返します。サーバーがQNetworkProxy を使用している場合、返される記述子はネイティブソケット関数では使用できない可能性があります。
setSocketDescriptor() およびisListening()も参照してください 。
QSslConfiguration QWebSocketServer::sslConfiguration() const
QWebSocketServer で使用されている SSL 設定を返します。サーバーがセキュアモード(QWebSocketServer::SecureMode )で実行されていない場合、このメソッドはQSslConfiguration::defaultConfiguration() を返します。
setSslConfiguration()、SslMode 、およびQSslConfiguration::defaultConfiguration()も参照してください 。
[signal] void QWebSocketServer::sslErrors(const QList<QSslError> &errors)
QWebSocketServer SSLハンドシェイクの後にこのシグナルを発し、ピアの身元確認中に1つ以上のエラーが発生したことを示します。
これらのエラーは通常、QWebSocketServer が相手側の身元を安全に確認できないことを示しています。何らかの措置を講じない限り、このシグナルが発行された後、接続は切断されます。
errors QSslSocket が相手側の身元を確認できない原因となる 1 つ以上のエラーが含まれています。
peerVerifyError() およびsslErrorsOccurred()も参照してください 。
[signal, since 6.11] void QWebSocketServer::sslErrorsOccurred(QSslSocket *socket, const QList<QSslError> &errors)
QWebSocketServer SSLハンドシェイクの後にこのシグナルを発し、相手側の身元確認中に1つ以上のエラーが発生したことを示します。
これらのエラーは通常、socket が相手側の身元を安全に確認できないことを示しています。何らかの措置を講じない限り、このシグナルが発行された後、接続は切断されます。
errors には、QSslSocket が相手側の身元を検証することを妨げる1つ以上のエラーが含まれています。
発生したエラーにもかかわらず接続を継続したい場合は、このシグナルに接続されたスロット内からQSslSocket::ignoreSslErrors()を呼び出す必要があります。後でエラーリストにアクセスする必要がある場合は、QSslSocket::sslHandshakeErrors()を呼び出すことができます。
注: このシグナルに接続する際にQt::QueuedConnection を使用することはできません 。そうすると、QSslSocket::ignoreSslErrors() を呼び出しても効果がありません。
この関数は Qt 6.11 で導入されました。
peerVerifyError() およびsslErrors()も参照してください 。
[since 6.4] QStringList QWebSocketServer::supportedSubprotocols() const
サーバーがサポートしているプロトコルのリストを返します。
この関数は Qt 6.4 で導入されました。
setSupportedSubprotocols()も参照してください 。
QList<QWebSocketProtocol::Version> QWebSocketServer::supportedVersions() const
このサーバーがサポートしている WebSocket バージョンのリストを返します。
© 2026 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.