QNetworkDatagram Class

QNetworkDatagramクラスは、UDPデータグラムのデータとメタデータを提供する。詳細...

ヘッダ #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(User Datagram Protocol)データグラムに含まれる完全な情報を表現できます。QNetworkDatagram は、データグラムの以下の情報をカプセル化します:

  • ペイロードデータ;
  • 送信者アドレスとポート番号;
  • 宛先アドレスとポート番号;
  • 残りのホップ数制限(IPv4では、このフィールドは通常「time to live」- TTLと呼ばれる);
  • データグラムが受信された、または送信されるネットワークインターフェースのインデックス。

QUdpSocket は、すべてのオペレーティングシステムで可能な限り共通の動作に合わせようとするが、オペレーティングシステムによっては、上記のメタデータのすべてが取得できるとは限らない。 ()で送信するときにデータグラムに設定できないメタデータは、黙って破棄される。QUdpSocket::writeDatagram

受信時、senderAddress ()とsenderPort ()プロパティには、 データグラムを送信したピアのアドレスとポートが格納され、destinationAddress ()とdestinationPort ()には、データグラムに含まれていたターゲットが格納される。これは通常、現在のマシンにローカルなアドレスであるが、IPv4ブロードキャストアドレス(「255.255.255.255」など)や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未対応未対応未対応

QUdpSocket およびQNetworkInterfaceも参照の こと。

メンバー関数ドキュメント

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)にリセットされる;

Qt の将来のバージョンでQNetworkDatagram が変更され、さらにメタデータが追加された場合、この関数はそのメタデータを適切にコピーします。

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()にtrueを報告する。

senderAddress()、destinationPort()、setDestination()も参照のこと

int QNetworkDatagram::destinationPort() const

このデータグラムに関連付けられた宛先のポート番号を返す。ネットワークから受信したデータグラムの場合、それはピアノードがデータグラムを送信したローカルポート番号です。送信データグラムの場合、それはデータグラムが送信されるべき相手ポートである。

このデータグラムに宛先アドレスが関連付けられていない場合、この関数は -1 を返す。

destinationAddress()、senderPort()、setDestination()も参照のこと

int QNetworkDatagram::hopLimit() const

このデータグラムに関連付けられたホップ数制限を返す。ホップ数制限とは、IPパケットが期限切れになってデータグラムの送信者にエラーが送り返されるまでに、転送を許可されるノードの数のことである。IPv4では、この値は通常「time to live」(TTL)として知られている。

このデータグラムがネットワークから受信された場合、これは受信後のデータグラムの残りのホップカウントであり、パケットを転送した各ノードによって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 オブジェクトが有効であれば真を返す。有効なQNetworkDatagram オブジェクトは、少なくとも1つの送信者アドレスまたは受信者アドレスを含む。有効なデータグラムは空のペイロードを含むことができる。

QHostAddress QNetworkDatagram::senderAddress() const

このデータグラムに関連付けられた送信者アドレスを返す。ネットワークから受信したデータグラムの場合、それはデータグラムを送信したピアノードのアドレスである。送信データグラムの場合、それは送信時に使用されるローカルアドレスである。

このデータグラムに送信者アドレスが設定されていない場合、返されたオブジェクトはQHostAddress::isNull()にtrueを報告する。

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パケットが期限切れになってデータグラムの送信者にエラーが送り返されるまでに、転送を許可されるノードの数である。IPv4では、この値は通常「time to live」(TTL)として知られている。

通常、ネットワークから受信したデータグラムに対してこの関数を呼び出す 必要はない。

これが送信パケットの場合、これは送信時にIPヘッダーに設定される値である。値の有効範囲は1〜255である。この関数は、オペレーティングシステムが値を選択することを示す -1 も受け付ける。

hopLimit()も参照のこと

void QNetworkDatagram::setInterfaceIndex(uint index)

このデータグラムが関連付けられているインターフェース・インデックスをindex に設定する。 インターフェース・インデックスは、オペレーティング・システムでネットワーク・イン ターフェースを一意に識別する正の数である。この番号は、QNetworkInterface::index() が返すインターフェイスの値と一致する。

通常、ネットワークから受信したデータグラムに対してこの関数を呼び出す 必要はない。

これが送信パケットの場合、これはデータグラムが送信されるべきインターフェースの インデックスである。値0は、オペレーティングシステムが他の要因に基づいてインターフェースを 選択すべきであることを示す。

インターフェイスインデックスは、IPv6宛先アドレスの場合、QHostAddress::setScopeId()で 設定し、setDestination()で設定することもできることに注意。宛先アドレスに設定されているスコープIDとindex に設定されているスコープIDが異なり、どちらも0でない場合、オペレーティングシステムがどのインターフェイスでデータグラムを送信するかは未定義である。

interfaceIndex() および setInterfaceIndex()も参照のこと

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

このデータグラムに関連付けられた送信者アドレスをアドレスaddress 、ポート番号port に設定する。送信者アドレスとポート番号は通常、受信時にQUdpSocket によって設定されるので、受信したデータグラムに対してこの関数を呼び出す必要はない。

送信データグラムの場合、この関数は、データグラムが伝送すべきアドレスを設定する ために使用できる。アドレスaddress は通常、このマシンに割り当てられているローカルアドレスの1つでなければならない。このアドレスは、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.