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() |
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 | 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 | 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() 函数。
也可以使用观察请求。使用方法同上,或者使用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 相同,但也包含资源列表。
另请参阅 QCoapRequest,QCoapReply, 和QCoapResourceDiscoveryReply 。
成员函数文档
[explicit]
QCoapClient::QCoapClient(QtCoap::SecurityMode securityMode = QtCoap::SecurityMode::NoSecurity, QObject *parent = nullptr)
为给定的securityMode 构建一个 QCoapClient 对象,并将parent 设置为父对象。
securityMode 的默认值是QtCoap::NoSecurity ,它禁用了安全性。
该对象使用 QCoapQUdpConnection 进行连接;若要使用自定义传输,可将 QCoapConnection 子类,并将实例传递给其他构造函数之一。
[virtual noexcept]
QCoapClient::~QCoapClient()
销毁QCoapClient 对象并释放所有资源。请注意,从该类返回的QCoapReply 对象将QCoapClient 设置为父对象,这意味着它们将被一并删除。
void QCoapClient::cancelObserve(QCoapReply *notifiedReply)
这是一个重载函数。
使用observe() 方法返回的 replynotifiedReply 取消对资源的观测。
另请参阅 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 对象,该对象会在响应到达时发出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"))
这是一个重载函数。
在给定的port 上发现已加入group 的端点的可用资源。返回一个新的QCoapResourceDiscoveryReply 对象,该对象会在收到响应时发出QCoapResourceDiscoveryReply::discovered() 信号。group 是 CoAP 多播组地址之一,默认为QtCoap::AllCoapNodesIPv4 。
发现路径默认为"/.owned/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 对象,该对象会在有新通知到达时发出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 方法发送request ,并返回一个新的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 方法发送request ,并返回一个新的QCoapReply 对象。使用data 作为该请求的有效负载。如果data 为空,则将使用request 的有效负载。
另请参阅 get()、post()、deleteResource()、observe() 和discover()。
QCoapReply *QCoapClient::put(const QCoapRequest &request, QIODevice *device)
这是一个重载函数。
使用 PUT 方法发送request ,并返回一个新的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().
[signal]
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)
将RFC 7252 - 第 4.2 节中定义的ACK_TIMEOUT
值设置为ackTimeout ,单位为毫秒。默认值为 2000 毫秒。
此超时仅适用于可确认报文。可靠传输的实际超时是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 。
© 2025 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.