QWebSocketServer Class

WebSocketベースのサーバーを実装します。詳細...

Header: #include <QWebSocketServer>
CMake: find_package(Qt6 REQUIRED COMPONENTS WebSockets)
target_link_libraries(mytarget PRIVATE Qt6::WebSockets)
qmake: QT += websockets
Inherits: 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::ConnectedStateQWebSocket へのポインタを返します。

エラーが発生した場合、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::SecureMode0サーバがセキュアモードで動作している (wss 経由)
QWebSocketServer::NonSecureMode1サーバは非セキュアモード(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::AlertLevelQSsl::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::AlertLevelQSsl::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 を 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 の場合、ポートは自動的に選択される。addressQHostAddress::Any の場合、サーバはすべてのネットワーク・インタフェースをリッスンします。

成功すると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)

このシグナルは、新しい接続が要求されたときに発せられる。このシグナルに接続されているスロットは、authenticator オブジェクトで(setAllowed()を発行することで)オリジン(origin()呼び出しで決定できる)が許可されているかどうかを示す必要がある。

このシグナルにスロットが接続されていない場合、デフォルトですべてのオリジンが許可される。

注意: QueuedConnectionを使用してこのシグナルに接続することはできない。

void QWebSocketServer::pauseAccepting()

新しいコネクションの着信を一時停止します。キューに入れられた接続はキューに残ります。

resumeAccepting()も参照

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

QWebSocketServer は、SSLハンドシェイク中、暗号化が確立する前にこのシグナルを何度か発して、相手のIDを確立する際にエラーが発生したことを示すことができます。 は通常、 がピアを安全に識別できないことを示す。error QWebSocketServer

このシグナルは、何か問題が発生したときに、その兆候を早期に示してくれる。このシグナルに接続することで、ハンドシェイクが完了する前に、接続されたスロットの内部から手動で接続を切断することを選択できる。何もアクションを起こさなければ、QWebSocketServerQWebSocketServer::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 handshake フェーズで使用するサーバー名を返します。

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 のバージョンのリストを返します。

©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。