QUdpSocket Class
Die Klasse QUdpSocket stellt einen UDP-Socket zur Verfügung. Mehr...
Header: | #include <QUdpSocket> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
Vererbt: | QAbstractSocket |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QUdpSocket ist Teil der Network Programming API.
Hinweis: Alle Funktionen in dieser Klasse sind reentrant.
Öffentliche Funktionen
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) |
Detaillierte Beschreibung
UDP (User Datagram Protocol) ist ein leichtes, unzuverlässiges, datagrammorientiertes, verbindungsloses Protokoll. Es kann verwendet werden, wenn die Zuverlässigkeit nicht wichtig ist. QUdpSocket ist eine Unterklasse von QAbstractSocket, mit der Sie UDP-Datagramme senden und empfangen können.
Die gebräuchlichste Art, diese Klasse zu verwenden, besteht darin, sich mit bind() an eine Adresse und einen Port zu binden und dann writeDatagram() und readDatagram() / receiveDatagram() aufzurufen, um Daten zu übertragen. Wenn Sie die Standardfunktionen QIODevice read (), readLine(), write() usw. verwenden wollen, müssen Sie den Socket zunächst direkt mit einer Gegenstelle verbinden, indem Sie connectToHost() aufrufen.
Der Socket gibt das Signal bytesWritten() jedes Mal aus, wenn ein Datagramm in das Netzwerk geschrieben wird. Wenn Sie nur Datagramme senden wollen, brauchen Sie bind() nicht aufzurufen.
Das Signal readyRead() wird immer dann ausgegeben, wenn Datagramme ankommen. In diesem Fall gibt hasPendingDatagrams() true
zurück. Rufen Sie pendingDatagramSize() auf, um die Größe des ersten anstehenden Datagramms zu ermitteln, und readDatagram() oder receiveDatagram(), um es zu lesen.
Hinweis: Ein ankommendes Datagramm sollte gelesen werden, wenn Sie das Signal readyRead() erhalten, sonst wird dieses Signal für das nächste Datagramm nicht ausgegeben.
Beispiel:
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 unterstützt auch UDP-Multicast. Verwenden Sie joinMulticastGroup() und leaveMulticastGroup(), um die Gruppenzugehörigkeit zu kontrollieren, und QAbstractSocket::MulticastTtlOption und QAbstractSocket::MulticastLoopbackOption, um die TTL- und Loopback-Socket-Optionen zu setzen. Verwenden Sie setMulticastInterface(), um die ausgehende Schnittstelle für Multicast-Datagramme zu kontrollieren, und multicastInterface(), um sie abzufragen.
Mit QUdpSocket können Sie auch eine virtuelle Verbindung zu einem UDP-Server mit connectToHost() herstellen und dann read() und write() verwenden, um Datagramme auszutauschen, ohne den Empfänger für jedes Datagramm festzulegen.
Die Beispiele Broadcast-Sender, Broadcast-Empfänger, Multicast-Sender und Multicast-Empfänger veranschaulichen die Verwendung von QUdpSocket in Anwendungen.
Siehe auch QTcpSocket und QNetworkDatagram.
Dokumentation der Mitgliedsfunktionen
[explicit]
QUdpSocket::QUdpSocket(QObject *parent = nullptr)
Erzeugt ein QUdpSocket-Objekt.
parent wird an den QObject -Konstruktor übergeben.
Siehe auch socketType().
[virtual noexcept]
QUdpSocket::~QUdpSocket()
Zerstört den Socket und schließt die Verbindung, falls erforderlich.
Siehe auch close().
bool QUdpSocket::hasPendingDatagrams() const
Gibt true
zurück, wenn mindestens ein Datagramm darauf wartet, gelesen zu werden; andernfalls wird false
zurückgegeben.
Siehe auch pendingDatagramSize() und readDatagram().
bool QUdpSocket::joinMulticastGroup(const QHostAddress &groupAddress)
Tritt der durch groupAddress angegebenen Multicast-Gruppe an der vom Betriebssystem gewählten Standardschnittstelle bei. Der Socket muss sich im BoundState befinden, andernfalls tritt ein Fehler auf.
Beachten Sie, dass, wenn Sie versuchen, einer IPv4-Gruppe beizutreten, Ihr Socket nicht mit IPv6 (oder im Dualmodus mit QHostAddress::Any) gebunden sein darf. Sie müssen stattdessen QHostAddress::AnyIPv4 verwenden.
Diese Funktion gibt bei Erfolg true
zurück; andernfalls gibt sie false
zurück und setzt den Socket-Fehler entsprechend.
Hinweis: Der Beitritt zu IPv6-Multicast-Gruppen ohne Schnittstellenauswahl wird nicht von allen Betriebssystemen unterstützt. Erwägen Sie die Verwendung der Überlast, bei der die Schnittstelle angegeben wird.
Siehe auch leaveMulticastGroup().
bool QUdpSocket::joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)
Dies ist eine überladene Funktion.
Tritt der Multicast-Gruppenadresse groupAddress an der Schnittstelle iface bei.
Siehe auch leaveMulticastGroup().
bool QUdpSocket::leaveMulticastGroup(const QHostAddress &groupAddress)
Verlässt die durch groupAddress angegebene Multicast-Gruppe auf der vom Betriebssystem gewählten Standardschnittstelle. Der Socket muss sich im BoundState befinden, andernfalls tritt ein Fehler auf.
Diese Funktion gibt bei Erfolg true
zurück; andernfalls gibt sie false
zurück und setzt den Socket-Fehler entsprechend.
Hinweis: Diese Funktion sollte mit denselben Argumenten aufgerufen werden, die an joinMulticastGroup() übergeben wurden.
Siehe auch joinMulticastGroup().
bool QUdpSocket::leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)
Dies ist eine überladene Funktion.
Verlässt die durch groupAddress angegebene Multicast-Gruppe auf der Schnittstelle iface.
Hinweis: Diese Funktion sollte mit denselben Argumenten aufgerufen werden, die an joinMulticastGroup() übergeben wurden.
Siehe auch joinMulticastGroup().
QNetworkInterface QUdpSocket::multicastInterface() const
Gibt die Schnittstelle für die ausgehende Schnittstelle für Multicast-Datagramme zurück. Dies entspricht der Socket-Option IP_MULTICAST_IF für IPv4-Sockets und der Socket-Option IPV6_MULTICAST_IF für IPv6-Sockets. Wenn zuvor keine Schnittstelle gesetzt wurde, gibt diese Funktion ein ungültiges QNetworkInterface zurück. Der Socket muss sich im BoundState befinden, andernfalls wird ein ungültiges QNetworkInterface zurückgegeben.
Siehe auch setMulticastInterface().
qint64 QUdpSocket::pendingDatagramSize() const
Gibt die Größe des ersten anstehenden UDP-Datagramms zurück. Wenn kein Datagramm verfügbar ist, gibt diese Funktion -1 zurück.
Siehe auch hasPendingDatagrams() und readDatagram().
qint64 QUdpSocket::readDatagram(char *data, qint64 maxSize, QHostAddress *address = nullptr, quint16 *port = nullptr)
Empfängt ein Datagramm, das nicht größer als maxSize Bytes ist, und speichert es in data. Die Host-Adresse und der Port des Absenders werden in *address und *port gespeichert (sofern die Zeiger nicht nullptr
sind).
Gibt bei Erfolg die Größe des Datagramms zurück, andernfalls -1.
Wenn maxSize zu klein ist, geht der Rest des Datagramms verloren. Um Datenverluste zu vermeiden, rufen Sie pendingDatagramSize() auf, um die Größe des anstehenden Datagramms zu ermitteln, bevor Sie versuchen, es zu lesen. Wenn maxSize gleich 0 ist, wird das Datagramm verworfen.
Siehe auch writeDatagram(), hasPendingDatagrams(), und pendingDatagramSize().
QNetworkDatagram QUdpSocket::receiveDatagram(qint64 maxSize = -1)
Empfängt ein Datagramm, das nicht größer als maxSize Bytes ist, und gibt es zusammen mit der Hostadresse und dem Port des Absenders im Objekt QNetworkDatagram zurück. Wenn möglich, versucht diese Funktion auch, die Zieladresse des Datagramms, den Port und die Anzahl der Sprünge zum Zeitpunkt des Empfangs zu bestimmen.
Bei einem Fehlschlag wird ein QNetworkDatagram zurückgegeben, das not valid meldet.
Wenn maxSize zu klein ist, geht der Rest des Datagramms verloren. Wenn maxSize gleich 0 ist, wird das Datagramm verworfen. Ist maxSize gleich -1 (die Voreinstellung), versucht diese Funktion, das gesamte Datagramm zu lesen.
Siehe auch writeDatagram(), hasPendingDatagrams(), und pendingDatagramSize().
void QUdpSocket::setMulticastInterface(const QNetworkInterface &iface)
Setzt die ausgehende Schnittstelle für Multicast-Datagramme auf die Schnittstelle iface. Dies entspricht der Socket-Option IP_MULTICAST_IF für IPv4-Sockets und der Socket-Option IPV6_MULTICAST_IF für IPv6-Sockets. Der Socket muss sich im BoundState befinden, andernfalls führt diese Funktion nichts aus.
Siehe auch multicastInterface(), joinMulticastGroup(), und leaveMulticastGroup().
qint64 QUdpSocket::writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)
Sendet das Datagramm unter data mit der Größe size an die Host-Adresse address am Port port. Gibt bei Erfolg die Anzahl der gesendeten Bytes zurück; andernfalls wird -1 zurückgegeben.
Datagramme werden immer als ein Block geschrieben. Die maximale Größe eines Datagramms ist stark plattformabhängig, kann aber bis zu 8192 Bytes betragen. Wenn das Datagramm zu groß ist, gibt diese Funktion -1 zurück und error() gibt DatagramTooLargeError zurück.
Das Senden von Datagrammen, die größer als 512 Bytes sind, ist im Allgemeinen nicht empfehlenswert, da sie, selbst wenn sie erfolgreich gesendet werden, wahrscheinlich von der IP-Schicht fragmentiert werden, bevor sie an ihrem endgültigen Ziel ankommen.
Warnung: Der Aufruf dieser Funktion bei einem verbundenen UDP-Socket kann zu einem Fehler führen und dazu, dass kein Paket gesendet wird. Wenn Sie einen verbundenen Socket verwenden, benutzen Sie write(), um Datagramme zu senden.
Siehe auch readDatagram() und write().
qint64 QUdpSocket::writeDatagram(const QNetworkDatagram &datagram)
Dies ist eine überladene Funktion.
Sendet das Datagramm datagram an die Host-Adresse und die Port-Nummern, die in datagram enthalten sind, unter Verwendung der ebenfalls dort eingestellten Grenzen für die Netzwerkschnittstelle und die Anzahl der Sprünge. Wenn die Zieladresse und die Portnummern nicht gesetzt sind, sendet diese Funktion an die Adresse, die an connectToHost() übergeben wurde.
Handelt es sich bei der Zieladresse um eine IPv6-Adresse mit einem nicht leeren scope id, die sich jedoch vom Schnittstellenindex in datagram unterscheidet, ist nicht definiert, über welche Schnittstelle das Betriebssystem senden soll.
Die Funktion gibt die Anzahl der gesendeten Bytes zurück, wenn sie erfolgreich war, oder -1, wenn sie auf einen Fehler gestoßen ist.
Warnung: Der Aufruf dieser Funktion bei einem verbundenen UDP-Socket kann zu einem Fehler führen und dazu, dass kein Paket gesendet wird. Wenn Sie ein verbundenes Socket verwenden, benutzen Sie write(), um Datagramme zu senden.
Siehe auch QNetworkDatagram::setDestination(), QNetworkDatagram::setHopLimit(), und QNetworkDatagram::setInterfaceIndex().
qint64 QUdpSocket::writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)
Dies ist eine überladene Funktion.
Sendet das Datagramm datagram an die Host-Adresse host und an den Port port.
Die Funktion gibt die Anzahl der gesendeten Bytes zurück, wenn sie erfolgreich war, oder -1, wenn sie auf einen Fehler gestoßen ist.
© 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.