QCoapClient Class
Die Klasse „QCoapClient“ ermöglicht es der Anwendung, CoAP-Anfragen zu senden und Antworten zu empfangen. Mehr...
| Header: | #include <QCoapClient> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Coap) target_link_libraries(mytarget PRIVATE Qt6::Coap) |
| qmake: | QT += coap |
| Erbt von: | QObject |
Hinweis: Alle Funktionen dieser Klasse sind reentrant.
Eigenschaften
(since 6.11)bindInterface : QNetworkInterface
Öffentliche Funktionen
| 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) |
Signale
| 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) |
Detaillierte Beschreibung
Die Klasse „QCoapClient“ enthält Signale, die ausgelöst werden, wenn die Antwort auf eine gesendete Anfrage eingegangen ist.
Die Anwendung kann einen `QCoapClient` verwenden, um Anfragen über ein CoAP-Netzwerk zu senden. Er stellt Funktionen für Standardanfragen bereit: Jede gibt ein ` QCoapReply `-Objekt zurück, an das die Antwortdaten übermittelt werden sollen; diese können gelesen werden, sobald das Signal ` finished()` eintrifft.
Eine einfache Anfrage kann wie folgt gesendet werden:
QCoapClient *client = new QCoapClient(this);
connect(client, &QCoapClient::finished, this, &TestClass::slotFinished);
client->get(QCoapRequest(Qurl("coap://coap.me/test")));Hinweis: Nach Abschluss der Verarbeitung der Anfrage liegt es in der Verantwortung des Benutzers, das „ QCoapReply “-Objekt zu einem geeigneten Zeitpunkt zu löschen. Löschen Sie es nicht direkt innerhalb des Slots, der mit „ finished()“ verbunden ist. Sie können die Funktion „ deleteLater()“ verwenden.
Sie können auch eine „observe“-Anfrage verwenden. Diese kann wie oben beschrieben oder bequemer über das Signal „ QCoapReply::notified()“ genutzt werden:
QCoapRequest request = QCoapRequest(Qurl("coap://coap.me/obs"));
QCoapReply *reply = client->observe(request);
connect(reply, &QCoapReply::notified, this, &TestClass::slotNotified);Und die Beobachtung kann mit folgendem Befehl abgebrochen werden:
client->cancelObserve(reply);Wenn eine Antwort eintrifft, sendet der QCoapClient ein Signal „ finished()“ aus.
Hinweis: Bei einer Discovery-Anfrage ist das zurückgegebene Objekt ein „ QCoapResourceDiscoveryReply “. Es kann genauso wie ein „ QCoapReply “ verwendet werden, enthält jedoch zusätzlich eine Liste von Ressourcen.
Sicherheitshinweise
Während einer blockweisen Übertragung wird die Antwortnutzlast im Speicher angesammelt, bis die Übertragung abgeschlossen ist, und „ QtCoap “ legt keine Obergrenze für die angesammelte Größe fest. Ein böswilliger oder fehlerhafter Server, der ständig Blöcke sendet, ohne jemals den letzten zu signalisieren, kann daher dazu führen, dass der Speicher des Clients erschöpft wird. Die angesammelte Größe ist während der Übertragung nicht erkennbar, sodass eine Anwendung sie nicht direkt begrenzen kann. Führen Sie blockweise Datenaustausche nur mit vertrauenswürdigen Servern und vorzugsweise in einem vertrauenswürdigen oder isolierten Netzwerk durch.
Multicast
DTLS schützt eine Verbindung zwischen zwei Endpunkten und kann daher nicht auf Multicast angewendet werden, bei dem mehr als zwei Endpunkte vorhanden sein können. Aus diesem Grund werden eine Multicast-Anfrage und ihre Antworten weder verschlüsselt noch authentifiziert.
Jeder Host in der Gruppe kann auf eine Multicast-Anfrage antworten. Bei CoAP sind diese Hosts alle legitime Eigentümer der Ressource und es wird erwartet, dass sie gleichwertige Antworten liefern. Wenn eine Antwort blockweise gesendet wird, werden die verbleibenden Blöcke per Unicast von dem Host abgerufen, der geantwortet hat.
CoAP-Multicast basiert auf der Annahme, dass das Netzwerk gesichert ist und jedem Knoten in der Gruppe vertraut werden kann. Verwenden Sie Multicast nur in Szenarien, die diese Annahme erfüllen.
Siehe auch QCoapRequest, QCoapReply und QCoapResourceDiscoveryReply.
Dokumentation zu den Eigenschaften
[since 6.11] bindInterface : QNetworkInterface
Diese Eigenschaft enthält die Netzwerkschnittstelle, die vom Socket verwendet werden soll
Der Standardwert ist ein „ invalid “ QNetworkInterface -Objekt, was bedeutet, dass eingehende Pakete von allen Netzwerkschnittstellen akzeptiert werden. Ebenso können alle Netzwerkschnittstellen zum Senden ausgehender Pakete verwendet werden.
Wird eine gültige Netzwerkschnittstelle angegeben, werden eingehende Pakete nur von dieser Schnittstelle akzeptiert. Ebenso werden ausgehende Pakete ausschließlich über diese Schnittstelle gesendet.
Das Ändern der Eigenschaft wirkt sich erst aus, wenn der Client das nächste Mal eine Verbindung zum Socket herstellt. Rufen Sie daher unbedingt ` disconnect()` auf, falls zuvor bereits Kommunikation stattgefunden hat.
Diese Aufzählung wurde in Qt 6.11 eingeführt.
Zugriffsfunktionen:
| QNetworkInterface | bindInterface() const |
| void | setBindInterface(const QNetworkInterface &iface) |
Notifier-Signal:
| void | bindInterfaceChanged(const QNetworkInterface &iface) |
Dokumentation der Mitgliedsfunktionen
[explicit] QCoapClient::QCoapClient(QtCoap::SecurityMode securityMode = QtCoap::SecurityMode::NoSecurity, QObject *parent = nullptr)
Erstellt ein QCoapClient-Objekt für den angegebenen „ securityMode “ und legt „ parent “ als übergeordnetes Objekt fest.
Der Standardwert für „ securityMode “ ist „ QtCoap::NoSecurity “, wodurch die Sicherheit deaktiviert wird.
[virtual noexcept] QCoapClient::~QCoapClient()
Löscht das „ QCoapClient “-Objekt und gibt alle Ressourcen frei. Beachten Sie, dass bei den von dieser Klasse zurückgegebenen „ QCoapReply “-Objekten „ QCoapClient “ als übergeordnetes Objekt festgelegt ist, was bedeutet, dass sie zusammen mit diesem gelöscht werden.
void QCoapClient::cancelObserve(QCoapReply *notifiedReply)
Hebt die Beobachtung einer Ressource auf, wobei die Antwort „ notifiedReply “ verwendet wird, die von der Methode „ observe()“ zurückgegeben wurde.
Dies ist eine überladene Funktion.
Siehe auch ` observe()`.
void QCoapClient::cancelObserve(const QUrl &url)
Hebt die Beobachtung einer Ressource auf, die durch die url identifiziert wird.
Dies ist eine überladene Funktion.
Siehe auch observe().
QCoapReply *QCoapClient::deleteResource(const QCoapRequest &request)
Sendet die „ request “ mithilfe der DELETE-Methode und gibt ein neues „ QCoapReply “-Objekt zurück.
Siehe auch „ get()“, „ put()“, „ post()“, „ observe()“ und „ discover()“.
QCoapReply *QCoapClient::deleteResource(const QUrl &url)
Sendet eine DELETE-Anfrage an die Ziel- url.
Dies ist eine überladene Funktion.
Siehe auch get(), put(), post(), observe() und discover().
void QCoapClient::disconnect()
Schließt die offenen Sockets und Verbindungen, um den Transport freizugeben.
Hinweis: Im sicheren Modus muss diese Funktion aufgerufen werden, bevor die Sicherheitskonfiguration geändert oder eine Verbindung zu einem anderen Server hergestellt wird.
Siehe auch setSecurityConfiguration().
QCoapResourceDiscoveryReply *QCoapClient::discover(const QUrl &url, const QString &discoveryPath = QLatin1String("/.well-known/core"))
Ermittelt die unter der angegebenen Adresse url verfügbaren Ressourcen und gibt ein neues QCoapResourceDiscoveryReply -Objekt zurück, das das Signal QCoapResourceDiscoveryReply::discovered() aussendet, sobald die Antwort eintrifft.
Der Erkennungspfad ist standardmäßig „/.well-known/core“, kann jedoch durch Übergabe eines anderen Pfads an discoveryPath geändert werden. Die Erkennung ist in RFC 6690 beschrieben.
Siehe auch get(), post(), put(), deleteResource() und observe().
QCoapResourceDiscoveryReply *QCoapClient::discover(QtCoap::MulticastGroup group = QtCoap::MulticastGroup::AllCoapNodesIPv4, int port = QtCoap::DefaultPort, const QString &discoveryPath = QLatin1String("/.well-known/core"))
Ermittelt die verfügbaren Ressourcen an den Endpunkten, die dem „ group “ unter der angegebenen Adresse port beigetreten sind. Gibt ein neues „ QCoapResourceDiscoveryReply “-Objekt zurück, das das Signal „ QCoapResourceDiscoveryReply::discovered()“ aussendet, sobald eine Antwort eintrifft. Die „ group “ ist eine der CoAP-Multicast-Gruppenadressen und lautet standardmäßig QtCoap::AllCoapNodesIPv4.
Der Discovery-Pfad ist standardmäßig „/.well-known/core“, kann jedoch durch Übergabe eines anderen Pfads an ` discoveryPath` geändert werden. Die Discovery wird in RFC 6690 beschrieben.
Dies ist eine überladene Funktion.
Siehe auch get(), post(), put(), deleteResource() und observe().
[signal] void QCoapClient::error(QCoapReply *reply, QtCoap::Error error)
Dieses Signal wird immer dann ausgelöst, wenn ein Fehler auftritt. Der Parameter „ reply “ kann auf „ nullptr “ gesetzt werden, wenn der Fehler nicht mit einem bestimmten „ QCoapReply “ zusammenhängt. Der Parameter „ error “ enthält den Fehlercode.
Siehe auch finished(), QCoapReply::error() und QCoapReply::finished().
[signal] void QCoapClient::finished(QCoapReply *reply)
Dieses Signal wird zusammen mit dem Signal „ QCoapReply::finished()“ ausgelöst, sobald eine CoAP-Antwort empfangen wird – unabhängig davon, ob diese erfolgreich war oder einen Fehler enthielt. Der Parameter „ reply “ enthält einen Zeiger auf die soeben empfangene Antwort.
Siehe auch error(), QCoapReply::finished() und QCoapReply::error().
QCoapReply *QCoapClient::get(const QCoapRequest &request)
Sendet die „ request “ mit der GET-Methode und gibt ein neues „ QCoapReply “-Objekt zurück.
Siehe auch post(), put(), deleteResource(), observe() und discover().
QCoapReply *QCoapClient::get(const QUrl &url)
Sendet eine GET-Anfrage an url und gibt ein neues QCoapReply -Objekt zurück.
Dies ist eine überladene Funktion.
Siehe auch post(), put(), deleteResource(), observe() und discover().
QCoapReply *QCoapClient::observe(const QCoapRequest &request)
Sendet eine Anfrage zur Beobachtung des Ziels request und gibt ein neues QCoapReply -Objekt zurück, das das Signal QCoapReply::notified() auslöst, sobald eine neue Benachrichtigung eintrifft.
Siehe auch cancelObserve(), get(), post(), put(), deleteResource() und discover().
QCoapReply *QCoapClient::observe(const QUrl &url)
Sendet eine Anfrage zur Beobachtung des Ziel- url s und gibt ein neues QCoapReply -Objekt zurück, das das Signal QCoapReply::notified() ausgibt, sobald eine neue Benachrichtigung eintrifft.
Dies ist eine überladene Funktion.
Siehe auch „ cancelObserve()“, „ get()“, „ post()“, „ put()“, „ deleteResource()“ und „ discover()“.
QCoapReply *QCoapClient::post(const QCoapRequest &request, const QByteArray &data = QByteArray())
Sendet die „ request “ mit der POST-Methode und gibt ein neues „ QCoapReply “-Objekt zurück. Verwendet „ data “ als Nutzdaten für diese Anfrage. Ist „ data “ leer, werden die Nutzdaten der „ request “ verwendet.
Siehe auch get(), put(), deleteResource(), observe() und discover().
QCoapReply *QCoapClient::post(const QCoapRequest &request, QIODevice *device)
Sendet die „ request “ mithilfe der POST-Methode und gibt ein neues „ QCoapReply “-Objekt zurück. Verwendet den Inhalt von „ device “ als Nutzdaten für diese Anfrage. Ein Null-Gerät wird als leerer Inhalt behandelt; in diesem Fall werden die Nutzdaten von „ request “ verwendet.
Hinweis: Das Gerät muss vor dem Aufruf dieser Funktion geöffnet und lesbar sein.
Dies ist eine überladene Funktion.
Siehe auch „ get()“, „ put()“, „ deleteResource()“, „ observe()“ und „ discover()“.
QCoapReply *QCoapClient::post(const QUrl &url, const QByteArray &data = QByteArray())
Sendet eine POST-Anfrage an url und gibt ein neues QCoapReply -Objekt zurück. Verwendet data als Nutzdaten für diese Anfrage.
Dies ist eine überladene Funktion.
Siehe auch get(), put(), deleteResource(), observe() und discover().
QCoapReply *QCoapClient::put(const QCoapRequest &request, const QByteArray &data = QByteArray())
Sendet die Datei „ request “ mit der PUT-Methode und gibt ein neues „ QCoapReply “-Objekt zurück. Verwendet „ data “ als Nutzdaten für diese Anfrage. Ist „ data “ leer, werden die Nutzdaten von „ request “ verwendet.
Siehe auch get(), post(), deleteResource(), observe() und discover().
QCoapReply *QCoapClient::put(const QCoapRequest &request, QIODevice *device)
Sendet die „ request “ mithilfe der PUT-Methode und gibt ein neues „ QCoapReply “-Objekt zurück. Verwendet den Inhalt von „ device “ als Nutzdaten für diese Anfrage. Ein Null-Gerät wird als leerer Inhalt behandelt; in diesem Fall werden die Nutzdaten von „ request “ verwendet.
Hinweis: Das Gerät muss vor dem Aufruf dieser Funktion geöffnet und lesbar sein.
Dies ist eine überladene Funktion.
Siehe auch „ get()“, „ post()“, „ deleteResource()“, „ observe()“ und „ discover()“.
QCoapReply *QCoapClient::put(const QUrl &url, const QByteArray &data = QByteArray())
Sendet eine PUT-Anfrage an url und gibt ein neues QCoapReply -Objekt zurück. Verwendet data als Nutzdaten für diese Anfrage.
Dies ist eine überladene Funktion.
Siehe auch get(), post(), deleteResource(), observe() und discover().
[signal] void QCoapClient::responseToMulticastReceived(QCoapReply *reply, const QCoapMessage &message, const QHostAddress &sender)
Dieses Signal wird ausgelöst, wenn eine Unicast-Antwort auf eine Multicast-Anfrage eintrifft. Der Parameter „ reply “ enthält einen Zeiger auf die soeben empfangene Antwort, „ message “ enthält die Nutzdaten und die Details der Nachricht, und „ sender “ enthält die Absenderadresse.
Hinweis: Multicast-Anfragen sind nicht authentifiziert; siehe „ multicast security considerations “ für das zugrunde liegende Vertrauensmodell.
Siehe auch error(), QCoapReply::finished() und QCoapReply::error().
void QCoapClient::setAckRandomFactor(double ackRandomFactor)
Setzt den in RFC 7252 – Abschnitt 4.2 definierten Wert „ ACK_RANDOM_FACTOR “ auf „ ackRandomFactor “. Dieser Wert sollte größer oder gleich 1 sein. Der Standardwert ist 1,5.
Siehe auch setAckTimeout().
void QCoapClient::setAckTimeout(uint ackTimeout)
Setzt den in RFC 7252 – Abschnitt 4.2 definierten Wert „ ACK_TIMEOUT “ auf „ ackTimeout “ in Millisekunden. Der Standardwert beträgt 2000 ms.
Dieses Timeout gilt nur für bestätigungsfähige Nachrichten. Das tatsächliche Timeout für zuverlässige Übertragungen ist ein Zufallswert zwischen ACK_TIMEOUT und ACK_TIMEOUT * ACK_RANDOM_FACTOR.
Siehe auch setAckRandomFactor().
void QCoapClient::setBlockSize(quint16 blockSize)
Legt die maximale Blockgröße fest, die das Protokoll beim Senden von Anfragen und beim Empfangen von Antworten verwendet: blockSize. Die Blockgröße muss eine Zweierpotenz sein.
void QCoapClient::setMaximumRetransmitCount(uint maximumRetransmitCount)
Setzt den in RFC 7252 – Abschnitt 4.2 definierten Wert „ MAX_RETRANSMIT “ auf „ maximumRetransmitCount “. Dieser Wert sollte kleiner oder gleich 25 sein. Der Standardwert ist 4.
void QCoapClient::setMaximumServerResponseDelay(uint responseDelay)
Legt den Wert für „ MAX_SERVER_RESPONSE_DELAY “ auf „ responseDelay “ in Millisekunden fest. Der Standardwert beträgt 250 Sekunden.
Wie in RFC 7390 – Abschnitt 2.5 definiert, ist „ MAX_SERVER_RESPONSE_DELAY “ die erwartete maximale Antwortverzögerung über alle Server hinweg, an die der Client eine Multicast-Anfrage senden kann.
void QCoapClient::setMinimumTokenSize(int tokenSize)
Legt die Mindestgröße des Tokens auf tokenSize in Byte fest. Aus Sicherheitsgründen wird empfohlen, Token mit einer Länge von mindestens 4 Byte zu verwenden. Der Standardwert für diesen Parameter beträgt 4 Byte.
void QCoapClient::setSecurityConfiguration(const QCoapSecurityConfiguration &configuration)
Legt die Sicherheitskonfigurationsparameter aus configuration fest. Die Konfiguration wird ignoriert, wenn der Modus „ QtCoap::NoSecurity “ verwendet wird.
Hinweis: Diese Methode muss vor Beginn des Handshakes aufgerufen werden. Wenn Sie die Sicherheitskonfiguration nach dem Aufbau einer sicheren Verbindung zum Server ändern müssen, muss die Verbindung zum Client zunächst getrennt werden.
Siehe auch disconnect().
void QCoapClient::setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)
Setzt die Socket- option en von „ QUdpSocket “ auf „ 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.