이 페이지에서

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개 이상의 엔드포인트가 존재할 수 있는 멀티캐스트에는 적용될 수 없습니다. 이 때문에 멀티캐스트 요청과 그에 대한 응답은 암호화되거나 인증되지 않습니다.

그룹 내의 모든 호스트는 멀티캐스트 요청에 응답할 수 있습니다. 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 멀티캐스트 그룹 주소 중 하나이며, 기본값은 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.