QCoapClient类

QCoapClient类允许应用程序发送CoAP请求并接收回复。更多信息...

头文件 #include <QCoapClient>
CMakefind_package(Qt6 REQUIRED COMPONENTS Coap)
target_link_libraries(mytarget PRIVATE Qt6::Coap)
qmakeQT += coap
继承 QObject

注意:此类中所有函数都可重入.

公开函数

QCoapClient(QtCoap::SecurityMode securityMode = QtCoap::SecurityMode::NoSecurity, QObject *parent = nullptr)
虚拟~QCoapClient()
voidcancelObserve(QCoapReply *notifiedReply)
voidcancelObserve(const QUrl &url)
QCoapReply *deleteResource(const QCoapRequest &request)
QCoapReply *deleteResource(const QUrl &url)
voiddisconnect()
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())
voidsetAckRandomFactor(double ackRandomFactor)
voidsetAckTimeout(uint ackTimeout)
voidsetBlockSize(quint16 blockSize)
voidsetMaximumRetransmitCount(uint maximumRetransmitCount)
voidsetMaximumServerResponseDelay(uint responseDelay)
voidsetMinimumTokenSize(int tokenSize)
voidsetSecurityConfiguration(const QCoapSecurityConfiguration &configuration)
voidsetSocketOption(QAbstractSocket::SocketOption option, const QVariant &value)

信号

voiderror(QCoapReply *reply, QtCoap::Error error)
voidfinished(QCoapReply *reply)
voidresponseToMulticastReceived(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()函数。

您还可以使用观察请求。这可以像上面那样使用,或者更方便地使用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一样使用,但还包含资源列表。

另请参阅:QCoapRequestQCoapReplyQCoapResourceDiscoveryReply

成员函数文档

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

为给定的securityMode构造QCoapClient对象,并设置parent为父对象。

securityMode的默认值为QtCoap::NoSecurity,这会禁用安全。

这使用QCoapQUdpConnection连接;要使用自定义传输,派生QCoapConnection并将实例传递给其他构造函数之一。

[虚拟 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 方法发送请求并返回一个新的 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 对象,每次响应到达时都会发出 QCoapResourceDiscoveryReply::discovered() 信号。

发现路径默认为 "/.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"))

这是一个重载函数。

发现已加入给定 portgroup 端点可用的资源。返回一个新的 QCoapResourceDiscoveryReply 对象,每次响应到达时都会发出 QCoapResourceDiscoveryReply::discovered() 信号。其中 group 是 CoAP 组播组地址之一,默认为 QtCoap::AllCoapNodesIPv4

发现路径默认为 "/.well-known/core",但可以通过传入不同的路径给 discoveryPath 来更改。发现过程见 RFC 6690

另请参阅 get()、post()、put()、deleteResource() 和 observe

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

每当发生错误时都会发出此信号。如果错误与特定 QCoapReply 无关,reply 参数可以是 nullptrerror 参数包含错误代码。

另请参阅 finished(),QCoapReply::error() 和 QCoapReply::finished

[信号] 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 对象,每当收到新通知时发出 QCoapReply::notified() 信号。

另请参阅 cancelObserve(),get(),post(),put(),deleteResource() 和 discover()。

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

这是一个重载函数。

发送一个观察目标 url 的请求并返回一个新的 QCoapReply 对象,每当收到新通知时发出 QCoapReply::notified() 信号。

另请参阅 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方法发送请求并返回一个新的QCoapReply对象。使用device内容作为此请求的有效荷载。空设备被视为空内容。

注意:在调用此函数之前,设备必须打开并可读。

另请参阅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方法发送请求并返回一个新的QCoapReply对象。使用data作为此请求的有效荷载。如果data为空,则使用request的有效荷载。

另请参阅get(),post(),deleteResource(),observe()和discover()。

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

这是一个重载函数。

使用PUT方法发送请求并返回一个新的QCoapReply对象。使用device内容作为此请求的有效荷载。空设备被视为空内容。

注意:在调用此函数之前,设备必须打开并可读。

另请参阅get(),post(),deleteResource(),observe()和discover()。

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

这是一个重载函数。

url发送一个PUT请求并返回一个新的QCoapReply对象。使用data作为此请求的有效荷载。

另请参阅get(),post(),deleteResource(),observe()和discover()。

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

此信号在接收到单播响应时发出。参数reply包含刚刚接收到的响应的指针,message包含有效荷载和消息细节,而sender包含发送者的地址。

另请参阅 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)

ACK_TIMEOUT 值设置为 RFC 7252 - 第 4.2 节 中定义的 ackTimeout 毫秒。默认值为 2000 毫秒。

此超时仅适用于确认消息。可靠传输的实际超时值是在 ACK_TIMEOUTACK_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

© 2024 Qt公司有限公司。本文件中包含的文档贡献权属于其各自的所有者。本文件提供的文档根据《自由软件基金会》(Free Software Foundation)发布的GNU自由文档许可协议(GPL)1.3版进行许可。Qt及其相关商标是芬兰以及/或全球其他国家的Qt公司有限公司的注册商标。其他所有商标均为其各自所有者的财产。