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はNetwork Programming APIに含まれます。
注意:このクラスの関数はすべてリエントラントです。
パブリック関数
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() を使用してグループ・メンバーシップを制御し、QAbstractSocket::MulticastTtlOption とQAbstractSocket::MulticastLoopbackOption を使用してTTLとループバック・ソケット・オプションを設定する。マルチキャスト・データグラムの送信インタフェースの制御には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)
これはオーバーロードされた関数である。
groupAddress で指定されたマルチキャストグループをインターフェースiface に残す。
注意: この関数は、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 のデータグラムを、ポートport のホストアドレスaddress に送信する。成功すれば送信バイト数を返し、そうでなければ -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 を返します。
© 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.