このページでは

QCoapClient Class

QCoapClient クラスを使用すると、アプリケーションは CoAP リクエストを送信し、応答を受信することができます。詳細...

ヘッダー: #include <QCoapClient>
CMake: find_package(Qt6 REQUIRED COMPONENTS Coap)
target_link_libraries(mytarget PRIVATE Qt6::Coap)
qmake: QT += coap
継承元: QObject

注:このクラスのすべての関数は再入可能である。

プロパティ

パブリック関数

QCoapClient(QtCoap::SecurityMode securityMode = QtCoap::SecurityMode::NoSecurity, QObject *parent = nullptr)
virtual ~QCoapClient()
QNetworkInterface bindInterface() const
void cancelObserve(QCoapReply *notifiedReply)
void cancelObserve(const QUrl &url)
QCoapReply *deleteResource(const QCoapRequest &request)
QCoapReply *deleteResource(const QUrl &url)
void disconnect()
QCoapResourceDiscoveryReply *discover(const QUrl &url, const QString &discoveryPath = QLatin1String("/.well-known/core"))
QCoapResourceDiscoveryReply *discover(QtCoap::MulticastGroup group = QtCoap::MulticastGroup::AllCoapNodesIPv4, int port = QtCoap::DefaultPort, const QString &discoveryPath = QLatin1String("/.well-known/core"))
QCoapReply *get(const QCoapRequest &request)
QCoapReply *get(const QUrl &url)
QCoapReply *observe(const QCoapRequest &request)
QCoapReply *observe(const QUrl &url)
QCoapReply *post(const QCoapRequest &request, const QByteArray &data = QByteArray())
QCoapReply *post(const QCoapRequest &request, QIODevice *device)
QCoapReply *post(const QUrl &url, const QByteArray &data = QByteArray())
QCoapReply *put(const QCoapRequest &request, const QByteArray &data = QByteArray())
QCoapReply *put(const QCoapRequest &request, QIODevice *device)
QCoapReply *put(const QUrl &url, const QByteArray &data = QByteArray())
void setAckRandomFactor(double ackRandomFactor)
void setAckTimeout(uint ackTimeout)
void setBindInterface(const QNetworkInterface &iface)
void setBlockSize(quint16 blockSize)
void setMaximumRetransmitCount(uint maximumRetransmitCount)
void setMaximumServerResponseDelay(uint responseDelay)
void setMinimumTokenSize(int tokenSize)
void setSecurityConfiguration(const QCoapSecurityConfiguration &configuration)
void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)

シグナル

void bindInterfaceChanged(const QNetworkInterface &iface)
void error(QCoapReply *reply, QtCoap::Error error)
void finished(QCoapReply *reply)
void responseToMulticastReceived(QCoapReply *reply, const QCoapMessage &message, const QHostAddress &sender)

詳細な説明

QCoapClient クラスには、送信したリクエストへの応答が到着した際にトリガーされるシグナルが含まれています。

アプリケーションは、QCoapClient を使用して CoAP ネットワークを介してリクエストを送信できます。このクラスは、標準的なリクエストのための関数を提供しています。各関数は、応答データが配信されるQCoapReply オブジェクトを返します。このデータは、finished() シグナルが到着したときに読み取ることができます。

簡単なリクエストは次のように送信できます:

QCoapClient *client = new QCoapClient(this);
connect(client, &QCoapClient::finished, this, &TestClass::slotFinished);
client->get(QCoapRequest(Qurl("coap://coap.me/test")));

注: リクエストの処理が完了した後 、適切なタイミングでQCoapReply オブジェクトを削除するのはユーザーの責任です。finished()に接続されたスロット内で直接削除しないでください。deleteLater()関数を使用できます。

observeリクエストを使用することもできます。これは上記と同様に使用できますが、QCoapReply::notified()シグナルを使用するとより便利です:

QCoapRequest request = QCoapRequest(Qurl("coap://coap.me/obs"));
QCoapReply *reply = client->observe(request);
connect(reply, &QCoapReply::notified, this, &TestClass::slotNotified);

また、オブザーベーションは次のようにキャンセルできます:

client->cancelObserve(reply);

応答が届くと、QCoapClientはfinished()シグナルを発行します。

注: ディスカバリリクエストの場合 、返されるオブジェクトは `QCoapResourceDiscoveryReply` です。これは `QCoapReply ` と同様に使用できますが、リソースのリストも含まれています。

セキュリティに関する考慮事項

ブロック単位の転送中、応答のペイロードは転送が完了するまでメモリに蓄積されますが、QtCoap は蓄積サイズの上限を規定していません。 そのため、最終ブロックを通知することなくブロックを送り続ける悪意のあるサーバーや誤動作しているサーバーにより、クライアントのメモリが枯渇する可能性があります。転送が進行中は蓄積サイズを確認できないため、アプリケーション側で直接その上限を設定することはできません。ブロック単位のやり取りは、信頼できるサーバーとの間でのみ行い、できれば信頼できるネットワークまたは隔離されたネットワーク上で実施してください。

マルチキャスト

DTLS は 2 つのエンドポイント間の接続を保護するものであり、2 つ以上のエンドポイントが存在する可能性があるマルチキャストには適用できません。このため、マルチキャストリクエストとその応答は、暗号化も認証もされません。

グループ内のすべてのホストがマルチキャスト要求に応答する可能性があります。CoAP では、これらのホストはすべてリソースの正当な所有者であり、同等の応答を返すものと想定されています。応答がブロック単位で送信される場合、残りのブロックは応答したホストからユニキャストで取得されます。

CoAPのマルチキャストは、ネットワークが安全であり、グループ内のすべてのノードが信頼できるという前提で設計されています。この前提を満たすシナリオでのみ、マルチキャストを使用してください。

関連項目: QCoapRequest 、QCoapReply 、およびQCoapResourceDiscoveryReply 。

プロパティのドキュメント

[since 6.11] bindInterface : QNetworkInterface

このプロパティは、ソケットが使用するネットワークインターフェースを保持します

デフォルト値は `invalid `QNetworkInterface オブジェクトであり、これはすべてのネットワークインターフェースからの着信パケットを受け入れることを意味します。同様に、送信パケットの送信にもすべてのネットワークインターフェースを使用できます。

有効なネットワークインターフェースが指定された場合、着信パケットはそのインターフェースからのみ受け入れられます。同様に、送信パケットもそのインターフェースを使用してのみ送信されます。

このプロパティを変更しても、その効果はクライアントが次にソケットにバインドしたときにのみ反映されるため、それ以前に通信が行われていた場合は、必ずdisconnect()を呼び出してください。

この列挙型は Qt 6.11 で導入されました。

アクセス関数:

QNetworkInterface bindInterface() const
void setBindInterface(const QNetworkInterface &iface)

Notifierシグナル:

void bindInterfaceChanged(const QNetworkInterface &iface)

メンバ関数のドキュメント

[explicit] QCoapClient::QCoapClient(QtCoap::SecurityMode securityMode = QtCoap::SecurityMode::NoSecurity, QObject *parent = nullptr)

指定されたsecurityMode に対応するQCoapClientオブジェクトを構築し、parent を親オブジェクトとして設定します。

securityMode のデフォルト値はQtCoap::NoSecurity であり、これによりセキュリティが無効化されます。

[virtual noexcept] QCoapClient::~QCoapClient()

QCoapClient オブジェクトを破棄し、関連するリソースを解放します。なお、このクラスから返されるQCoapReply オブジェクトには、QCoapClient が親として設定されているため、このオブジェクトが削除されると、それとともに オブジェクトも削除されることに注意してください。

void QCoapClient::cancelObserve(QCoapReply *notifiedReply)

observe() メソッドによって返される応答「notifiedReply 」を使用して、リソースの監視を解除します。

これはオーバーロードされた関数です。

observe()も参照してください 。

void QCoapClient::cancelObserve(const QUrl &url)

url で指定されたリソースの監視を解除します。

これはオーバーロードされた関数です。

observe()も参照してください 。

QCoapReply *QCoapClient::deleteResource(const QCoapRequest &request)

DELETEメソッドを使用してrequest を送信し、新しいQCoapReply オブジェクトを返します。

get()、put()、post()、observe()、およびdiscover()も参照してください 。

QCoapReply *QCoapClient::deleteResource(const QUrl &url)

対象のurl に対して DELETE リクエストを送信します。

これはオーバーロードされた関数です。

get()、put()、post()、observe()、およびdiscover()も参照してください 。

void QCoapClient::disconnect()

開いているソケットと接続を閉じ、トランスポートを解放します。

注:セキュアモードでは 、セキュリティ設定を変更する前、または別のサーバーに接続する前に、この関数を呼び出す必要があります。

関連項目: setSecurityConfiguration()。

QCoapResourceDiscoveryReply *QCoapClient::discover(const QUrl &url, const QString &discoveryPath = QLatin1String("/.well-known/core"))

指定されたurl で利用可能なリソースを検出し、レスポンスが届くたびにQCoapResourceDiscoveryReply::discovered() シグナルを発行する新しいQCoapResourceDiscoveryReply オブジェクトを返します。

検出パスはデフォルトで「/.well-known/core」ですが、discoveryPath に別のパスを指定することで変更できます。検出に関する仕様はRFC 6690 に記載されています。

get()、post()、put()、deleteResource()、およびobserve()も参照してください 。

QCoapResourceDiscoveryReply *QCoapClient::discover(QtCoap::MulticastGroup group = QtCoap::MulticastGroup::AllCoapNodesIPv4, int port = QtCoap::DefaultPort, const QString &discoveryPath = QLatin1String("/.well-known/core"))

指定されたport でgroup に参加しているエンドポイントで利用可能なリソースを検出します。レスポンスが届くたびにQCoapResourceDiscoveryReply::discovered()シグナルを発行する新しいQCoapResourceDiscoveryReply オブジェクトを返します。group はCoAPマルチキャストグループアドレスの1つであり、デフォルトはQtCoap::AllCoapNodesIPv4 です。

ディスカバリパスはデフォルトで「/.well-known/core」ですが、discoveryPath に別のパスを渡すことで変更できます。ディスカバリについてはRFC 6690で規定されています。

これはオーバーロードされた関数です。

get()、post()、put()、deleteResource()、およびobserve()も参照してください 。

[signal] void QCoapClient::error(QCoapReply *reply, QtCoap::Error error)

このシグナルは、エラーが発生するたびに発信されます。エラーが特定のQCoapReply に関連していない場合、reply パラメータにはnullptr を指定できます。error パラメータにはエラーコードが含まれます。

finished()、QCoapReply::error()、およびQCoapReply::finished()も参照してください 。

[signal] void QCoapClient::finished(QCoapReply *reply)

このシグナルは、CoAPの応答が受信された際(成功時またはエラー時を問わず)、QCoapReply::finished() シグナルとともに発火します。reply パラメータには、受信されたばかりの応答へのポインタが格納されます。

error()、QCoapReply::finished()、およびQCoapReply::error()も参照してください 。

QCoapReply *QCoapClient::get(const QCoapRequest &request)

GETメソッドを使用してrequest を送信し、新しいQCoapReply オブジェクトを返します。

post()、put()、deleteResource()、observe()、およびdiscover()も参照してください 。

QCoapReply *QCoapClient::get(const QUrl &url)

url に対して GET リクエストを送信し、新しいQCoapReply オブジェクトを返します。

これはオーバーロードされた関数です。

post()、put()、deleteResource()、observe()、およびdiscover()も参照してください 。

QCoapReply *QCoapClient::observe(const QCoapRequest &request)

ターゲットrequest を監視するリクエストを送信し、新しい通知が届くたびにQCoapReply::notified() シグナルを発行する新しいQCoapReply オブジェクトを返します。

cancelObserve()、get()、post()、put()、deleteResource()、およびdiscover()も参照してください 。

QCoapReply *QCoapClient::observe(const QUrl &url)

ターゲットのurl を監視するリクエストを送信し、新しい通知が届くたびにQCoapReply::notified()シグナルを発火する新しいQCoapReply オブジェクトを返します。

これはオーバーロードされた関数です。

cancelObserve()、get()、post()、put()、deleteResource()、およびdiscover()も参照してください 。

QCoapReply *QCoapClient::post(const QCoapRequest &request, const QByteArray &data = QByteArray())

POSTメソッドを使用してrequest を送信し、新しいQCoapReply オブジェクトを返します。このリクエストのペイロードとしてdata を使用します。data が空の場合、request のペイロードが使用されます。

get()、put()、deleteResource()、observe()、およびdiscover()も参照してください 。

QCoapReply *QCoapClient::post(const QCoapRequest &request, QIODevice *device)

POSTメソッドを使用してrequest を送信し、新しいQCoapReply オブジェクトを返します。このリクエストのペイロードとして、device のコンテンツを使用します。nullのデバイスは空のコンテンツとして扱われ、その場合はrequest のペイロードが使用されます。

注: この関数を呼び出す前に、デバイスが開かれており 、読み取り可能である必要があります。

これはオーバーロードされた関数です。

関連項目: get()、put()、deleteResource()、observe()、およびdiscover()。

QCoapReply *QCoapClient::post(const QUrl &url, const QByteArray &data = QByteArray())

url に対して POST リクエストを送信し、新しいQCoapReply オブジェクトを返します。このリクエストのペイロードとしてdata を使用します。

これはオーバーロードされた関数です。

get()、put()、deleteResource()、observe()、およびdiscover()も参照してください 。

QCoapReply *QCoapClient::put(const QCoapRequest &request, const QByteArray &data = QByteArray())

PUTメソッドを使用してrequest を送信し、新しいQCoapReply オブジェクトを返します。このリクエストのペイロードとしてdata を使用します。data が空の場合、request のペイロードが使用されます。

get()、post()、deleteResource()、observe()、およびdiscover()も参照してください 。

QCoapReply *QCoapClient::put(const QCoapRequest &request, QIODevice *device)

PUTメソッドを使用してrequest を送信し、新しいQCoapReply オブジェクトを返します。このリクエストのペイロードとして、device のコンテンツを使用します。nullのデバイスは空のコンテンツとして扱われ、その場合はrequest のペイロードが使用されます。

注: この関数を呼び出す前に、デバイスが オープンされており、読み取り可能である必要があります。

これはオーバーロードされた関数です。

関連項目: get()、post()、deleteResource()、observe()、およびdiscover()。

QCoapReply *QCoapClient::put(const QUrl &url, const QByteArray &data = QByteArray())

url に対して PUT リクエストを送信し、新しいQCoapReply オブジェクトを返します。このリクエストのペイロードとしてdata を使用します。

これはオーバーロードされた関数です。

get()、post()、deleteResource()、observe()、およびdiscover()も参照してください 。

[signal] void QCoapClient::responseToMulticastReceived(QCoapReply *reply, const QCoapMessage &message, const QHostAddress &sender)

このシグナルは、マルチキャスト要求に対するユニキャスト応答が到着した際に発信されます。reply パラメータには、受信したばかりの応答へのポインタが含まれ、message にはペイロードとメッセージの詳細が含まれ、sender には送信元アドレスが含まれます。

注:マルチキャスト リクエストは認証されません。これが依存する信頼モデルについては、multicast security considerations を参照してください。

関連項目: error()、QCoapReply::finished()、およびQCoapReply::error()も参照してください 。

void QCoapClient::setAckRandomFactor(double ackRandomFactor)

RFC 7252 のセクション 4.2 で定義されている「ACK_RANDOM_FACTOR 」の値を、ackRandomFactor に設定します。この値は 1 以上である必要があります。デフォルトは 1.5 です。

setAckTimeout()も参照してください 。

void QCoapClient::setAckTimeout(uint ackTimeout)

RFC 7252 - セクション 4.2で定義されている「ACK_TIMEOUT 」の値を、ackTimeout (ミリ秒単位)に設定します。デフォルトは 2000 ms です。

このタイムアウトは、確認可能なメッセージにのみ適用されます。信頼性のある送信における実際のタイムアウトは、ACK_TIMEOUT からACK_TIMEOUT * ACK_RANDOM_FACTOR までの間のランダムな値となります。

setAckRandomFactor()も参照してください 。

void QCoapClient::setBlockSize(quint16 blockSize)

リクエストの送信および応答の受信時に、プロトコルが使用する最大ブロックサイズをblockSize に設定します。ブロックサイズは2の冪でなければなりません。

void QCoapClient::setMaximumRetransmitCount(uint maximumRetransmitCount)

RFC 7252 のセクション 4.2で定義されている「MAX_RETRANSMIT 」の値を「maximumRetransmitCount 」に設定します。この値は 25 以下である必要があります。デフォルト値は 4 です。

void QCoapClient::setMaximumServerResponseDelay(uint responseDelay)

MAX_SERVER_RESPONSE_DELAY の値をresponseDelay (ミリ秒単位)に設定します。デフォルトは250秒です。

RFC 7390 のセクション 2.5 で定義されているように、 MAX_SERVER_RESPONSE_DELAY は、クライアントがマルチキャストリクエストを送信できるすべてのサーバーにおける、予想される最大応答遅延です。

void QCoapClient::setMinimumTokenSize(int tokenSize)

トークンの最小サイズをtokenSize バイトに設定します。セキュリティ上の理由から、長さが少なくとも4バイトのトークンを使用することをお勧めします。このパラメータのデフォルト値は4バイトです。

void QCoapClient::setSecurityConfiguration(const QCoapSecurityConfiguration &configuration)

configuration からセキュリティ設定パラメータを設定します。QtCoap::NoSecurity モードが使用されている場合、この設定は無視されます。

注:この メソッドは 、ハンドシェイクが開始される前に呼び出す必要があります。サーバーとのセキュアな接続を確立した後にセキュリティ設定を変更する必要がある場合は、まずクライアントを切断する必要があります。

関連項目: disconnect()。

void QCoapClient::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)

QUdpSocket のソケットoption をvalue に設定します。

© 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.