QUdpSocket Class
QUdpSocketクラスはUDPソケットを提供します。詳細...
Header: | #include <QUdpSocket> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
Inherits: | 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)
これはオーバーロードされた関数である。
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 のデータグラムを、ポート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 を返します。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。