このページでは

QUdpSocket Class

QUdpSocket クラスは UDP ソケットを提供します。詳細...

ヘッダー: #include <QUdpSocket>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
継承元: QAbstractSocket

注:このクラスのすべての関数は再入可能です。

パブリック関数

QUdpSocket(QObject *parent = nullptr)
virtual ~QUdpSocket()
bool hasPendingDatagrams() const
bool joinMulticastGroup(const QHostAddress &groupAddress)
bool joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)
bool leaveMulticastGroup(const QHostAddress &groupAddress)
bool leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)
QNetworkInterface multicastInterface() const
qint64 pendingDatagramSize() const
qint64 readDatagram(char *data, qint64 maxSize, QHostAddress *address = nullptr, quint16 *port = nullptr)
QNetworkDatagram receiveDatagram(qint64 maxSize = -1)
void setMulticastInterface(const QNetworkInterface &iface)
qint64 writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)
qint64 writeDatagram(const QNetworkDatagram &datagram)
qint64 writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)

詳細な説明

UDP (User Datagram Protocol) は、軽量で、信頼性が低く、データグラム指向の、接続レスなプロトコルです。信頼性が重要ではない場合に使用できます。QUdpSocket は、QAbstractSocket のサブクラスであり、UDP データグラムの送受信を可能にします。

このクラスを使用する最も一般的な方法は、bind() を使用してアドレスとポートにバインドし、writeDatagram() およびreadDatagram() /receiveDatagram() を呼び出してデータを転送することです。標準のQIODevice 関数であるread()、readLine()、write() などを使用したい場合は、まずconnectToHost() を呼び出して、ソケットをピアに直接接続する必要があります。

ソケットは、データグラムがネットワークに書き込まれるたびに、bytesWritten() シグナルを発行します。単にデータグラムを送信したいだけの場合、bind() を呼び出す必要はありません。

readyRead() シグナルは、データグラムが到着するたびに発火します。その場合、hasPendingDatagrams() はtrue を返します。最初の保留中のデータグラムのサイズを取得するにはpendingDatagramSize() を呼び出し、それを読み取るにはreadDatagram() またはreceiveDatagram() を呼び出します。

注: 着信データグラムは 、readyRead() シグナルを受信した際に読み込む必要があります。そうしないと、次のデータグラムに対してこのシグナルが発行されなくなります。

例:

void Server::initSocket()
{
    udpSocket = new QUdpSocket(this);
    udpSocket->bind(QHostAddress::LocalHost, 7755);

    connect(udpSocket, &QUdpSocket::readyRead,
            this, &Server::readPendingDatagrams);
}

void Server::readPendingDatagrams()
{
    while (udpSocket->hasPendingDatagrams()) {
        QNetworkDatagram datagram = udpSocket->receiveDatagram();
        processTheDatagram(datagram);
    }
}

QUdpSocketはUDPマルチキャストもサポートしています。グループメンバーシップの制御にはjoinMulticastGroup()およびleaveMulticastGroup()を使用し、TTLおよびループバックソケットオプションの設定にはQAbstractSocket::MulticastTtlOption およびQAbstractSocket::MulticastLoopbackOption を使用します。マルチキャストデータグラムの送信インターフェースの制御にはsetMulticastInterface()を使用し、その照会にはmulticastInterface()を使用します。

また、QUdpSocket を使用すると、connectToHost() を使用して UDP サーバーへの仮想接続を確立し、read() およびwrite() を使用して、各データグラムの受信先を個別に指定することなくデータグラムを交換することもできます。

Broadcast Sender、Broadcast Receiver、Multicast Sender、およびMulticast Receiverの各サンプルは、アプリケーションでの QUdpSocket の使用方法を示しています。

「 QTcpSocket 」および「QNetworkDatagram 」も参照してください 。

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

[explicit] QUdpSocket::QUdpSocket(QObject *parent = nullptr)

QUdpSocket オブジェクトを作成します。

parent QObject のコンストラクタに渡されます。

socketType()も参照してください 。

[virtual noexcept] QUdpSocket::~QUdpSocket()

ソケットを破棄し、必要に応じて接続を閉じます。

close()も参照してください 。

bool QUdpSocket::hasPendingDatagrams() const

読み取り待ちのデータグラムが少なくとも1つある場合はtrue を返し、そうでない場合はfalse を返します。

pendingDatagramSize() およびreadDatagram()も参照してください 。

bool QUdpSocket::joinMulticastGroup(const QHostAddress &groupAddress)

オペレーティングシステムによって選択されたデフォルトのインターフェース上で、groupAddress で指定されたマルチキャストグループに参加します。ソケットは BoundState である必要があります。そうでない場合、エラーが発生します。

IPv4グループに参加しようとする場合、ソケットはIPv6(またはデュアルモードでQHostAddress::Any を使用)でバインドされていてはならないことに注意してください。代わりにQHostAddress::AnyIPv4 を使用する必要があります。

この関数は、成功した場合は `true ` を返します。失敗した場合は `false ` を返し、ソケットのエラーを適切に設定します。

注: インターフェースを指定せずにIPv6マルチキャストグループに参加することは 、すべてのオペレーティングシステムでサポートされているわけではありません。インターフェースを指定するオーバーロードの使用を検討してください。

関連項目 :leaveMulticastGroup()

bool QUdpSocket::joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)

インターフェースiface 上で、マルチキャストグループアドレスgroupAddress に参加します。

これはオーバーロードされた関数です。

leaveMulticastGroup()も参照してください 。

bool QUdpSocket::leaveMulticastGroup(const QHostAddress &groupAddress)

オペレーティングシステムによって選択されたデフォルトのインターフェース上で、groupAddress で指定されたマルチキャストグループから離脱します。ソケットは BoundState である必要があります。そうでない場合、エラーが発生します。

この関数は、成功した場合に `true ` を返します。失敗した場合は `false ` を返し、ソケットのエラー状態を適切に設定します。

注:この関数は 、joinMulticastGroup() に渡されたものと同じ引数で呼び出す必要があります。

joinMulticastGroup()も参照してください 。

bool QUdpSocket::leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)

インターフェースiface 上で、groupAddress で指定されたマルチキャストグループから退出します。

注: この関数は 、joinMulticastGroup() に渡されたものと同じ引数を指定して呼び出す必要があります。

これはオーバーロードされた関数です。

joinMulticastGroup()も参照してください 。

QNetworkInterface QUdpSocket::multicastInterface() const

マルチキャストデータグラムの送信インターフェースを返します。 これは、IPv4ソケットの `IP_MULTICAST_IF` ソケットオプションおよびIPv6ソケットの `IPV6_MULTICAST_IF` ソケットオプションに対応します。事前にインターフェースが設定されていない場合、この関数は無効な `QNetworkInterface` を返します。ソケットは `BoundState` 状態である必要があります。そうでない場合、無効な `QNetworkInterface ` が返されます。

setMulticastInterface()も参照してください 。

qint64 QUdpSocket::pendingDatagramSize() const

最初の保留中のUDPデータグラムのサイズを返します。利用可能なデータグラムがない場合、この関数は-1を返します。

hasPendingDatagrams() およびreadDatagram()も参照してください 。

qint64 QUdpSocket::readDatagram(char *data, qint64 maxSize, QHostAddress *address = nullptr, quint16 *port = nullptr)

maxSize バイト以下のデータグラムを受信し、それをdata に格納します。送信元のホストアドレスとポートは、*address および*port に格納されます(ただし、これらのポインタがnullptr である場合は除きます)。

成功した場合はデータグラムのサイズを返し、失敗した場合は -1 を返します。

maxSize が小さすぎる場合、データグラムの残りの部分は失われます。データの損失を防ぐには、読み取りを試みる前にpendingDatagramSize()を呼び出して、待機中のデータグラムのサイズを確認してください。maxSize が0の場合、データグラムは破棄されます。

writeDatagram()、hasPendingDatagrams()、およびpendingDatagramSize()も参照してください 。

QNetworkDatagram QUdpSocket::receiveDatagram(qint64 maxSize = -1)

maxSize バイト以下のデータグラムを受信し、送信元のホストアドレスおよびポートとともに、QNetworkDatagram オブジェクトとして返します。可能であれば、この関数は受信時にデータグラムの宛先アドレス、ポート、およびホップ数を特定しようとします。

失敗した場合は、not valid を報告するQNetworkDatagram を返します。

maxSize が小さすぎる場合、データグラムの残りの部分は失われます。maxSize が0の場合、データグラムは破棄されます。maxSize が-1(デフォルト)の場合、この関数はデータグラム全体を読み込もうとします。

writeDatagram()、hasPendingDatagrams()、およびpendingDatagramSize()も参照してください 。

void QUdpSocket::setMulticastInterface(const QNetworkInterface &iface)

マルチキャストデータグラムの送信インターフェースを、インターフェースiface に設定します。これは、IPv4 ソケットの IP_MULTICAST_IF ソケットオプション、および IPv6 ソケットの IPV6_MULTICAST_IF ソケットオプションに相当します。ソケットは BoundState である必要があります。そうでない場合、この関数は何も行いません。

multicastInterface()、joinMulticastGroup()、およびleaveMulticastGroup()も参照してください 。

qint64 QUdpSocket::writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)

サイズがsize のデータグラムを、data からホストアドレスaddress のポートport へ送信します。成功した場合は送信されたバイト数を返し、失敗した場合は-1を返します。

データグラムは常に1つのブロックとして書き込まれます。データグラムの最大サイズはプラットフォームに大きく依存しますが、8192バイト程度まで小さくなる場合があります。データグラムが大きすぎる場合、この関数は-1を返し、error()はDatagramTooLargeErrorを返します。

512 バイトを超えるデータグラムの送信は、一般的に推奨されません。たとえ送信に成功したとしても、最終的な宛先に到達する前に IP 層によってフラグメント化される可能性が高いからです。

警告: 接続済みの UDP ソケットに対してこの関数を呼び出すと 、エラーが発生し、パケットが送信されない場合があります。接続済みのソケットを使用する場合は、write() を使用してデータグラムを送信してください。

readDatagram() およびwrite()も参照してください 。

qint64 QUdpSocket::writeDatagram(const QNetworkDatagram &datagram)

datagram datagram に含まれるホストアドレスおよびポート番号宛てに、同ファイルに設定されたネットワークインターフェースおよびホップ数制限を使用して、データグラムを送信します。宛先アドレスおよびポート番号が設定されていない場合、この関数は () に渡されたアドレス宛てに送信を行います。connectToHost

宛先アドレスが IPv6 で、scope id が空でないものの、datagram に指定されたインターフェースインデックスと異なる場合、オペレーティングシステムがどのインターフェースを選択して送信するかは未定義です。

この関数は、成功した場合は送信されたバイト数を返し、エラーが発生した場合は -1 を返します。

警告: 接続済みの UDP ソケットでこの関数を呼び出すと 、エラーが発生し、パケットが送信されない場合があります。接続済みのソケットを使用する場合は、write() を使用してデータグラムを送信してください。

これはオーバーロードされた関数です。

QNetworkDatagram::setDestination()、QNetworkDatagram::setHopLimit()、およびQNetworkDatagram::setInterfaceIndex()も参照してください 。

qint64 QUdpSocket::writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)

データグラムdatagram を、ホストアドレスhost のポートport へ送信します。

この関数は、成功した場合は送信されたバイト数を返し、エラーが発生した場合は -1 を返します。

これはオーバーロードされた関数です。

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