QNetworkDatagram Class

QNetworkDatagram 클래스는 UDP 데이터그램의 데이터와 메타데이터를 제공합니다. 더 보기...

Header: #include <QNetworkDatagram>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network

참고: 이 클래스의 모든 함수는 재인용됩니다.

공용 함수

QNetworkDatagram()
QNetworkDatagram(const QByteArray &data, const QHostAddress &destinationAddress = QHostAddress(), quint16 port = 0)
QNetworkDatagram(const QNetworkDatagram &other)
void clear()
QByteArray data() const
QHostAddress destinationAddress() const
int destinationPort() const
int hopLimit() const
uint interfaceIndex() const
bool isNull() const
bool isValid() const
QNetworkDatagram makeReply(const QByteArray &payload) &&
QNetworkDatagram makeReply(const QByteArray &payload) const &
QHostAddress senderAddress() const
int senderPort() const
void setData(const QByteArray &data)
void setDestination(const QHostAddress &address, quint16 port)
void setHopLimit(int count)
void setInterfaceIndex(uint index)
void setSender(const QHostAddress &address, quint16 port = 0)
void swap(QNetworkDatagram &other)
QNetworkDatagram &operator=(const QNetworkDatagram &other)

상세 설명

QNetworkDatagram은 QUdpSocket 클래스와 함께 사용하여 UDP(사용자 데이터그램 프로토콜) 데이터그램에 포함된 전체 정보를 나타낼 수 있습니다. QNetworkDatagram은 데이터그램의 다음 정보를 캡슐화합니다:

  • 페이로드 데이터
  • 발신자 주소 및 포트 번호
  • 대상 주소 및 포트 번호
  • 남은 홉 수 제한(IPv4에서는 이 필드를 일반적으로 "생존 시간" - TTL이라고 함);
  • 데이터그램이 수신되었거나 전송될 네트워크 인터페이스 인덱스.

QUdpSocket 는 모든 운영 체제에서 가능한 한 공통된 동작을 일치시키려고 노력하지만 일부 운영 체제에서는 위의 모든 메타데이터를 얻을 수 없습니다. QUdpSocket::writeDatagram ()로 보낼 때 데이터그램에 설정할 수 없는 메타데이터는 자동으로 삭제됩니다.

수신 시 senderAddress() 및 senderPort() 속성에는 데이터그램을 보낸 피어의 주소와 포트가 포함되며, destinationAddress() 및 destinationPort()에는 데이터그램에 포함된 대상이 포함됩니다. 이 주소는 일반적으로 현재 컴퓨터의 로컬 주소이지만, "255.255.255.255" 같은 IPv4 브로드캐스트 주소나 IPv4 또는 IPv6 멀티캐스트 주소가 될 수도 있습니다. 애플리케이션은 유니캐스트 주소 지정을 통해 데이터그램이 이 컴퓨터로만 전송되었는지 아니면 여러 대상에게 전송되었는지 확인하는 데 유용할 수 있습니다.

전송할 때 senderAddress() 및 senderPort()에는 전송 시 사용할 로컬 주소가 포함되어야 합니다. 발신자 주소는 QNetworkInterface 을 사용하여 얻을 수 있는 이 머신에 할당된 주소여야 하며, 포트 번호는 소켓이 바인딩된 포트 번호여야 합니다. 두 필드 모두 설정하지 않을 수 있으며 운영 체제에서 기본값으로 채워집니다. destinationAddress () 및 destinationPort() 필드는 현재 UDP 소켓이 연결된 주소와 다른 대상 주소로 설정할 수 있습니다.

일반적으로 이전에 수신한 데이터그램에 대한 응답으로 데이터그램을 보낼 때 destinationAddress()를 수신 데이터그램의 senderAddress()로 설정하고 포트 번호도 이와 유사하게 설정합니다. 이 일반적인 프로세스를 용이하게 하기 위해 QNetworkDatagram은 makeReply() 함수를 제공합니다.

hopCount() 함수는 수신 데이터그램의 경우 패킷의 남은 홉 수 제한을 포함합니다. 전송 시에는 설정할 홉 수 제한을 포함합니다. 대부분의 프로토콜은 이 값을 기본값으로 설정하고 운영 체제에서 사용할 최적의 값을 결정하도록 합니다. IPv4를 통한 멀티캐스팅에서는 이 필드를 사용하여 멀티캐스트 그룹의 범위(링크-로컬, 조직에 로컬 또는 글로벌)를 표시하는 경우가 많습니다.

interfaceIndex() 함수에는 패킷을 수신한 운영 체제 인터페이스의 인덱스가 포함되어 있습니다. 이 값은 QHostAddress::scopeId() 속성에서 설정할 수 있는 값과 동일하며 QNetworkInterface::index() 속성과 일치합니다. 글로벌 주소로 패킷을 보낼 때는 운영 체제에서 시스템 라우팅 테이블을 사용하여 올바른 인터페이스를 선택하므로 인터페이스 인덱스를 설정할 필요가 없습니다. 이 속성은 유니캐스트 또는 멀티캐스트에 관계없이 링크 로컬 대상에 데이터그램을 보낼 때 중요합니다.

기능 지원

일부 운영체제에서는 QNetworkDatagram의 일부 기능이 지원되지 않습니다. 모든 시스템에서 원격 호스트의 주소와 포트(수신 패킷의 발신자, 발신 패킷의 대상)만 지원됩니다. 대부분의 운영 체제에서 다른 기능은 IPv6에 대해서만 지원됩니다. 소프트웨어는 런타임에 나머지 기능이 IPv4 주소로 확인될 수 있는지 여부를 확인해야 합니다.

현재 지원되는 기능은 다음과 같습니다:

운영 체제로컬 주소홉 수인터페이스 색인
FreeBSD지원됨지원됨IPv6에만 해당
Linux지원됨지원됨지원됨
OS X지원됨지원됨IPv6에만 해당
RFC 3542를 지원하는 기타 UnixIPv6 전용IPv6 전용IPv6 전용
Windows(데스크톱)지원됨지원됨지원됨
Windows RT지원되지 않음지원되지 않음지원되지 않음

QUdpSocketQNetworkInterface참조하세요 .

멤버 함수 문서

QNetworkDatagram QNetworkDatagram::makeReply(const QByteArray &payload) &&

QNetworkDatagram QNetworkDatagram::makeReply(const QByteArray &payload) const &

이 수신 데이터그램에 대한 응답을 나타내는 QNetworkDatagram 을 새로 만들고 페이로드 데이터를 payload 으로 설정합니다. 이 함수는 원래 발신자에게 데이터그램에 다시 응답하는 매우 편리한 방법입니다.

예시:

    void Server::readPendingDatagrams()
    {
        while (udpSocket->hasPendingDatagrams()) {
            QNetworkDatagram datagram = udpSocket->receiveDatagram();
            QByteArray replyData = processThePayload(datagram.data());
            udpSocket->writeDatagram(datagram.makeReply(replyData));
        }
    }

이 함수는 이 데이터그램에서 새 데이터그램으로 매개변수를 적절하게 자동으로 복사하기 때문에 특히 편리합니다:

  • 이 데이터그램의 발신자 주소와 포트가 새 데이터그램의 수신자 주소와 포트에 복사됩니다;
  • 이 데이터그램의 인터페이스 인덱스가 있는 경우 새 데이터그램의 인터페이스 인덱스에 복사됩니다;
  • 이 데이터그램의 대상 주소와 포트는 주소가 IPv6 글로벌(멀티캐스트가 아닌) 주소인 경우에만 새 데이터그램의 발신자 주소와 포트로 복사됩니다;
  • 새 데이터그램의 홉 수 제한이 기본값(-1)으로 재설정됩니다;

QNetworkDatagram 가 향후 Qt 버전에서 추가 메타데이터를 전달하도록 수정되면, 이 함수는 해당 메타데이터를 적절히 복사합니다.

이 데이터그램의 대상 주소가 IPv4 주소인 경우 복사되지 않는데, 이는 이 시스템에 할당된 모든 주소를 완전히 검색하지 않으면 IPv4 브로드캐스트 주소와 일반 IPv4 주소를 구분할 수 없기 때문입니다. 발신자 주소가 브로드캐스트 주소와 동일한 데이터그램을 보내려고 시도하면 실패할 가능성이 높습니다. 그러나 여러 개의 IPv4 주소를 가진 네트워크 인터페이스는 흔하지 않으므로 운영 체제에서 선택하는 주소는 상대방이 이해할 수 있는 주소일 가능성이 높으므로 통신에 영향을 미치지는 않습니다.

참고: 이 함수에는 rvalue 및 lvalue 참조 한정자 오버로드가 모두 포함되므로 makeReply 를 호출하기 전에 가능하면 이 객체가 rvalue인지 확인하는 것이 이동 의미를 더 잘 활용할 수 있는 좋은 방법입니다. 이를 위해 위의 예제에서는 다음과 같이 사용합니다:

    udpSocket->writeDatagram(std::move(datagram).makeReply(replyData));

QNetworkDatagram::QNetworkDatagram()

페이로드 데이터와 정의되지 않은 대상 주소가 없는 QNetworkDatagram 객체를 생성합니다.

페이로드는 setData()를 사용하여 수정할 수 있으며, 대상 주소는 setDestination()로 설정할 수 있습니다.

대상 주소가 정의되지 않은 경우 QUdpSocket::writeDatagram()는 QUdpSocket::connectToHost()를 사용하여 마지막으로 연결된 주소로 데이터그램을 전송하려고 시도합니다.

QNetworkDatagram::QNetworkDatagram(const QByteArray &data, const QHostAddress &destinationAddress = QHostAddress(), quint16 port = 0)

QNetworkDatagram 객체를 생성하고 페이로드 데이터로 data, 데이터그램의 대상 주소로 destinationAddressport 을 설정합니다.

QNetworkDatagram::QNetworkDatagram(const QNetworkDatagram &other)

페이로드와 메타데이터를 포함한 other 데이터그램의 복사본을 만듭니다.

답장을 보내기에 적합한 데이터그램을 만들려면 QNetworkDatagram::makeReply()를 사용합니다;

void QNetworkDatagram::clear()

QNetworkDatagram 객체의 페이로드 데이터와 메타데이터를 지우고 기본값으로 재설정합니다.

QByteArray QNetworkDatagram::data() const

이 데이터그램의 데이터 페이로드를 반환합니다. 네트워크에서 수신한 데이터그램의 경우 데이터그램의 페이로드가 포함됩니다. 발신 데이터그램의 경우 전송할 데이터그램입니다.

데이터그램은 데이터 없이 전송될 수 있으므로 반환된 QByteArray 은 비어 있을 수 있습니다.

setData()도 참조하세요 .

QHostAddress QNetworkDatagram::destinationAddress() const

이 데이터그램과 연관된 대상 주소를 반환합니다. 네트워크에서 수신하는 데이터그램의 경우, 피어 노드가 데이터그램을 보낸 주소로, 이 컴퓨터의 로컬 주소이거나 멀티캐스트 또는 브로드캐스트 주소일 수 있습니다. 발신 데이터그램의 경우, 데이터그램이 전송되어야 하는 주소입니다.

이 데이터그램에 대상 주소가 설정되지 않은 경우 반환된 객체는 QHostAddress::isNull()에 참을 보고합니다.

senderAddress(), destinationPort() 및 setDestination()도 참조하세요 .

int QNetworkDatagram::destinationPort() const

이 데이터그램과 연결된 대상의 포트 번호를 반환합니다. 네트워크에서 수신한 데이터그램의 경우, 피어 노드가 데이터그램을 보낸 로컬 포트 번호입니다. 발신 데이터그램의 경우, 데이터그램이 전송되어야 하는 피어 포트입니다.

이 데이터그램에 연결된 대상 주소가 없으면 이 함수는 -1을 반환합니다.

destinationAddress(), senderPort(), setDestination()도 참조하세요 .

int QNetworkDatagram::hopLimit() const

이 데이터그램과 관련된 홉 수 제한을 반환합니다. 홉 수 제한은 IP 패킷이 만료되어 오류를 데이터그램 발신자에게 다시 보내기 전에 IP 패킷을 전달할 수 있는 노드 수입니다. IPv4에서 이 값은 일반적으로 "TTL(Time to Live)"로 알려져 있습니다.

이 데이터그램이 네트워크에서 수신된 경우, 이 값은 수신 후 데이터그램의 남은 홉 수이며 패킷을 전달한 각 노드에서 1씩 감소합니다. 값이 -1이면 홉 제한 횟수를 얻지 못했음을 나타냅니다.

발신 데이터그램인 경우 전송 시 IP 헤더에 설정할 값입니다. 값이 -1이면 운영 체제에서 값을 선택해야 함을 나타냅니다.

setHopLimit()도 참조하세요 .

uint QNetworkDatagram::interfaceIndex() const

이 데이터그램이 연관된 인터페이스 인덱스를 반환합니다. 인터페이스 인덱스는 운영 체제에서 네트워크 인터페이스를 고유하게 식별하는 양수입니다. 이 숫자는 인터페이스에 대해 QNetworkInterface::index()가 반환한 값과 일치합니다.

이 데이터그램이 네트워크에서 수신된 경우 패킷이 수신된 인터페이스의 인덱스입니다. 보내는 데이터그램인 경우 데이터그램이 전송되어야 하는 인터페이스의 인덱스입니다.

값이 0이면 인터페이스 인덱스를 알 수 없음을 나타냅니다.

setInterfaceIndex()도 참조하세요 .

bool QNetworkDatagram::isNull() const

QNetworkDatagram 객체가 null이면 true를 반환합니다. 이 함수는 isValid()와 반대입니다.

bool QNetworkDatagram::isValid() const

QNetworkDatagram 객체가 유효하면 true를 반환합니다. 유효한 QNetworkDatagram 객체에는 발신자 또는 수신자 주소가 하나 이상 포함되어 있습니다. 유효한 데이터그램은 빈 페이로드를 포함할 수 있습니다.

QHostAddress QNetworkDatagram::senderAddress() const

이 데이터그램과 연관된 발신자 주소를 반환합니다. 네트워크에서 수신한 데이터그램의 경우, 데이터그램을 보낸 피어 노드의 주소입니다. 발신 데이터그램의 경우, 전송할 때 사용할 로컬 주소입니다.

이 데이터그램에 발신자 주소가 설정되지 않은 경우 반환된 객체는 QHostAddress::isNull()에 참을 보고합니다.

destinationAddress(), senderPort() 및 setSender()도 참조하세요 .

int QNetworkDatagram::senderPort() const

이 데이터그램과 연관된 발신자의 포트 번호를 반환합니다. 네트워크에서 수신한 데이터그램의 경우, 피어 노드가 데이터그램을 보낸 포트 번호입니다. 발신 데이터그램의 경우, 데이터그램이 전송되어야 하는 로컬 포트입니다.

이 데이터그램과 연결된 발신자 주소가 없으면 이 함수는 -1을 반환합니다.

senderAddress(), destinationPort(), setSender()도 참조하세요 .

void QNetworkDatagram::setData(const QByteArray &data)

이 데이터그램의 데이터 페이로드를 data 로 설정합니다. 일반적으로 수신 데이터그램에서는 이 함수를 호출할 필요가 없습니다. 발신 데이터그램의 경우, 이 함수는 네트워크에서 전송할 데이터를 설정합니다.

데이터그램은 비어 있을 수 있으므로 비어 있는 QByteArraydata 에 유효한 값입니다.

data()도 참조하세요 .

void QNetworkDatagram::setDestination(const QHostAddress &address, quint16 port)

이 데이터그램과 연결된 대상 주소를 address 주소와 포트 번호 port 로 설정합니다. 대상 주소와 포트 번호는 일반적으로 수신 시 QUdpSocket 에 의해 설정되므로 수신 데이터그램에서 이 함수를 호출할 필요가 없습니다.

발신 데이터그램의 경우 이 함수를 사용하여 데이터그램이 전송될 주소를 설정할 수 있습니다. 이 주소는 피어와 통신하는 데 사용되는 유니캐스트 주소이거나 여러 디바이스 그룹에 보낼 브로드캐스트 또는 멀티캐스트 주소일 수 있습니다.

QUdpSocket::writeDatagram(), destinationAddress(), destinationPort() 및 setSender()도 참조하세요 .

void QNetworkDatagram::setHopLimit(int count)

이 데이터그램과 관련된 홉 수 제한을 count 으로 설정합니다. 홉 수 제한은 IP 패킷이 만료되어 오류를 데이터그램 발신자에게 다시 보내기 전에 IP 패킷을 전달할 수 있는 노드 수입니다. IPv4에서는 이 값을 일반적으로 "TTL(Time to Live)"이라고 합니다.

일반적으로 네트워크에서 수신한 데이터그램에서는 이 함수를 호출할 필요가 없습니다.

발신 패킷인 경우 전송 시 IP 헤더에 설정할 값입니다. 이 값의 유효한 범위는 1~255입니다. 이 함수는 운영 체제에서 값을 선택해야 함을 나타내는 -1 값도 허용합니다.

hopLimit()도 참조하세요 .

void QNetworkDatagram::setInterfaceIndex(uint index)

이 데이터그램과 연결된 인터페이스 인덱스를 index 로 설정합니다. 인터페이스 인덱스는 운영 체제에서 네트워크 인터페이스를 고유하게 식별하는 양수입니다. 이 숫자는 인터페이스에 대해 QNetworkInterface::index()가 반환한 값과 일치합니다.

일반적으로 네트워크에서 수신한 데이터그램에서는 이 함수를 호출할 필요가 없습니다.

보내는 패킷인 경우 데이터그램이 전송되어야 하는 인터페이스의 인덱스입니다. 값이 0이면 운영 체제가 다른 요인에 따라 인터페이스를 선택해야 함을 나타냅니다.

인터페이스 인덱스는 IPv6 대상 주소의 경우 QHostAddress::setScopeId()로 설정한 다음 setDestination()로 설정할 수도 있습니다. 대상 주소에 설정된 범위 ID와 index 가 서로 다르고 둘 다 0이 아닌 경우 운영 체제에서 데이터그램을 전송할 인터페이스가 정의되지 않습니다.

interfaceIndex() 및 setInterfaceIndex()도 참조하세요 .

void QNetworkDatagram::setSender(const QHostAddress &address, quint16 port = 0)

이 데이터그램과 연결된 발신자 주소를 address 주소와 포트 번호 port 로 설정합니다. 발신자 주소와 포트 번호는 일반적으로 수신 시 QUdpSocket 에 의해 설정되므로 수신 데이터그램에서 이 함수를 호출할 필요가 없습니다.

발신 데이터그램의 경우 이 함수를 사용하여 데이터그램이 전달해야 하는 주소를 설정할 수 있습니다. address 주소는 일반적으로 이 머신에 할당된 로컬 주소 중 하나이며 QNetworkInterface 을 사용하여 얻을 수 있습니다. 설정하지 않으면 운영 체제에서 해당 대상에 따라 가장 적합한 주소를 선택합니다.

포트 번호 port 는 소켓과 연결된 포트 번호(있는 경우)여야 합니다. 0 값을 사용하면 운영 체제에서 포트 번호를 선택하도록 지정할 수 있습니다.

QUdpSocket::writeDatagram(), senderAddress(), senderPort() 및 setDestination()도 참조하세요 .

[noexcept] void QNetworkDatagram::swap(QNetworkDatagram &other)

이 데이터그램을 other 로 바꿉니다. 이 작업은 매우 빠르며 실패하지 않습니다.

QNetworkDatagram &QNetworkDatagram::operator=(const QNetworkDatagram &other)

페이로드와 메타데이터를 포함한 other 데이터그램을 복사합니다.

답장을 보내기에 적합한 데이터그램을 만들려면 QNetworkDatagram::makeReply()를 사용합니다;

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