QUdpSocket Class
La classe QUdpSocket fournit une socket UDP. Plus d'informations...
| En-tête : | #include <QUdpSocket> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Network)target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake : | QT += network |
| Héritages : | QAbstractSocket |
- Liste de tous les membres, y compris les membres hérités
- QUdpSocket fait partie de l'API de programmation réseau.
Note : Toutes les fonctions de cette classe sont réentrantes.
Fonctions publiques
| 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) |
Description détaillée
UDP (User Datagram Protocol) est un protocole léger, non fiable, orienté vers les datagrammes et sans connexion. Il peut être utilisé lorsque la fiabilité n'est pas importante. QUdpSocket est une sous-classe de QAbstractSocket qui permet d'envoyer et de recevoir des datagrammes UDP.
La façon la plus courante d'utiliser cette classe est de se lier à une adresse et à un port en utilisant bind(), puis d'appeler writeDatagram() et readDatagram() / receiveDatagram() pour transférer des données. Si vous souhaitez utiliser les fonctions standard QIODevice read (), readLine(), write(), etc., vous devez d'abord connecter la socket directement à un pair en appelant connectToHost().
La socket émet le signal bytesWritten() chaque fois qu'un datagramme est écrit sur le réseau. Si vous souhaitez simplement envoyer des datagrammes, vous n'avez pas besoin d'appeler bind().
Le signal readyRead() est émis chaque fois que des datagrammes arrivent. Dans ce cas, hasPendingDatagrams() renvoie true. Appelez pendingDatagramSize() pour obtenir la taille du premier datagramme en attente, et readDatagram() ou receiveDatagram() pour le lire.
Remarque : un datagramme entrant doit être lu lorsque vous recevez le signal readyRead(), sinon ce signal ne sera pas émis pour le datagramme suivant.
Exemple :
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 supporte également le multicast UDP. Utilisez joinMulticastGroup() et leaveMulticastGroup() pour contrôler l'appartenance à un groupe, et QAbstractSocket::MulticastTtlOption et QAbstractSocket::MulticastLoopbackOption pour définir les options TTL et loopback de la socket. Utilisez setMulticastInterface() pour contrôler l'interface de sortie des datagrammes multicast et multicastInterface() pour l'interroger.
Avec QUdpSocket, vous pouvez également établir une connexion virtuelle avec un serveur UDP à l'aide de connectToHost(), puis utiliser read() et write() pour échanger des datagrammes sans spécifier le destinataire de chaque datagramme.
Les exemples Broadcast Sender, Broadcast Receiver, Multicast Sender et Multicast Receiver illustrent l'utilisation de QUdpSocket dans les applications.
Voir également QTcpSocket et QNetworkDatagram.
Documentation des fonctions membres
[explicit] QUdpSocket::QUdpSocket(QObject *parent = nullptr)
Crée un objet QUdpSocket.
parent est passé au constructeur de QObject.
Voir aussi socketType().
[virtual noexcept] QUdpSocket::~QUdpSocket()
Détruit le socket, en fermant la connexion si nécessaire.
Voir aussi close().
bool QUdpSocket::hasPendingDatagrams() const
Renvoie true si au moins un datagramme est en attente de lecture ; sinon, renvoie false.
Voir aussi pendingDatagramSize() et readDatagram().
bool QUdpSocket::joinMulticastGroup(const QHostAddress &groupAddress)
Rejoint le groupe multicast spécifié par groupAddress sur l'interface par défaut choisie par le système d'exploitation. La socket doit être dans l'état BoundState, sinon une erreur se produit.
Notez que si vous essayez de rejoindre un groupe IPv4, votre socket ne doit pas être lié en utilisant IPv6 (ou en mode dual, en utilisant QHostAddress::Any). Vous devez utiliser QHostAddress::AnyIPv4 à la place.
Cette fonction renvoie true en cas de succès, sinon elle renvoie false et définit l'erreur de socket en conséquence.
Remarque : la participation à des groupes de multidiffusion IPv6 sans sélection d'interface n'est pas prise en charge par tous les systèmes d'exploitation. Envisagez d'utiliser la surcharge où l'interface est spécifiée.
Voir aussi leaveMulticastGroup().
bool QUdpSocket::joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)
Rejoint le groupe de multidiffusion groupAddress sur l'interface iface.
Il s'agit d'une fonction surchargée.
Voir aussi leaveMulticastGroup().
bool QUdpSocket::leaveMulticastGroup(const QHostAddress &groupAddress)
Quitte le groupe multicast spécifié par groupAddress sur l'interface par défaut choisie par le système d'exploitation. La socket doit être dans l'état BoundState, sinon une erreur se produit.
Cette fonction renvoie true en cas de succès, sinon elle renvoie false et définit l'erreur de socket en conséquence.
Note : Cette fonction doit être appelée avec les mêmes arguments que ceux passés à joinMulticastGroup().
Voir aussi joinMulticastGroup().
bool QUdpSocket::leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)
Quitte le groupe multicast spécifié par groupAddress sur l'interface iface.
Note : Cette fonction doit être appelée avec les mêmes arguments que ceux passés à joinMulticastGroup().
Il s'agit d'une fonction surchargée.
Voir aussi joinMulticastGroup().
QNetworkInterface QUdpSocket::multicastInterface() const
Renvoie l'interface de sortie des datagrammes multicast. Cela correspond à l'option de socket IP_MULTICAST_IF pour les sockets IPv4 et à l'option de socket IPV6_MULTICAST_IF pour les sockets IPv6. Si aucune interface n'a été définie précédemment, cette fonction renvoie un QNetworkInterface invalide. La socket doit être en BoundState, sinon un QNetworkInterface invalide est renvoyé.
Voir aussi setMulticastInterface().
qint64 QUdpSocket::pendingDatagramSize() const
Renvoie la taille du premier datagramme UDP en attente. Si aucun datagramme n'est disponible, cette fonction renvoie -1.
Voir aussi hasPendingDatagrams() et readDatagram().
qint64 QUdpSocket::readDatagram(char *data, qint64 maxSize, QHostAddress *address = nullptr, quint16 *port = nullptr)
Reçoit un datagramme dont la taille ne dépasse pas maxSize octets et le stocke dans data. L'adresse de l'hôte et le port de l'expéditeur sont stockés dans *address et *port (sauf si les pointeurs sont nullptr).
Renvoie la taille du datagramme en cas de succès, sinon renvoie -1.
Si maxSize est trop petit, le reste du datagramme sera perdu. Pour éviter la perte de données, appelez pendingDatagramSize() pour déterminer la taille du datagramme en attente avant d'essayer de le lire. Si maxSize vaut 0, le datagramme sera rejeté.
Voir également writeDatagram(), hasPendingDatagrams() et pendingDatagramSize().
QNetworkDatagram QUdpSocket::receiveDatagram(qint64 maxSize = -1)
Reçoit un datagramme ne dépassant pas maxSize octets et le renvoie dans l'objet QNetworkDatagram, avec l'adresse de l'hôte et le port de l'expéditeur. Si possible, cette fonction tente également de déterminer l'adresse et le port de destination du datagramme, ainsi que le nombre de sauts au moment de la réception.
En cas d'échec, elle renvoie une adresse QNetworkDatagram qui signale not valid.
Si maxSize est trop petit, le reste du datagramme sera perdu. Si maxSize vaut 0, le datagramme sera rejeté. Si maxSize vaut -1 (valeur par défaut), cette fonction tentera de lire l'intégralité du datagramme.
Voir aussi writeDatagram(), hasPendingDatagrams() et pendingDatagramSize().
void QUdpSocket::setMulticastInterface(const QNetworkInterface &iface)
Définit l'interface de sortie pour les datagrammes multicast à l'interface iface. Cela correspond à l'option de socket IP_MULTICAST_IF pour les sockets IPv4 et à l'option de socket IPV6_MULTICAST_IF pour les sockets IPv6. La socket doit être en BoundState, sinon cette fonction ne fait rien.
Voir aussi multicastInterface(), joinMulticastGroup(), et leaveMulticastGroup().
qint64 QUdpSocket::writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)
Envoie le datagramme à data de taille size à l'adresse de l'hôte address au port port. Renvoie le nombre d'octets envoyés en cas de succès, sinon renvoie -1.
Les datagrammes sont toujours écrits en un seul bloc. La taille maximale d'un datagramme dépend fortement de la plate-forme, mais peut être aussi basse que 8192 octets. Si le datagramme est trop grand, cette fonction renvoie -1 et error() renvoie DatagramTooLargeError.
L'envoi de datagrammes de plus de 512 octets est généralement déconseillé, car même s'ils sont envoyés avec succès, ils risquent d'être fragmentés par la couche IP avant d'arriver à leur destination finale.
Attention : L'appel de cette fonction sur une socket UDP connectée peut entraîner une erreur et aucun paquet n'est envoyé. Si vous utilisez une socket connectée, utilisez write() pour envoyer des datagrammes.
Voir aussi readDatagram() et write().
qint64 QUdpSocket::writeDatagram(const QNetworkDatagram &datagram)
Envoie le datagramme datagram à l'adresse de l'hôte et aux numéros de port contenus dans datagram, en utilisant l'interface réseau et les limites du nombre de sauts également définies à cet endroit. Si l'adresse de destination et les numéros de port ne sont pas définis, cette fonction enverra le datagramme à l'adresse qui a été transmise à connectToHost().
Si l'adresse de destination est IPv6 avec un scope id non vide mais diffère de l'index de l'interface dans datagram, l'interface que le système d'exploitation choisira d'utiliser pour l'envoi n'est pas définie.
La fonction renvoie le nombre d'octets envoyés si elle a réussi ou -1 si elle a rencontré une erreur.
Attention : L'appel de cette fonction sur une socket UDP connectée peut entraîner une erreur et aucun paquet n'est envoyé. Si vous utilisez une socket connectée, utilisez write() pour envoyer des datagrammes.
Il s'agit d'une fonction surchargée.
Voir aussi QNetworkDatagram::setDestination(), QNetworkDatagram::setHopLimit() et QNetworkDatagram::setInterfaceIndex().
qint64 QUdpSocket::writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)
Envoie le datagramme datagram à l'adresse de l'hôte host et au port port.
La fonction renvoie le nombre d'octets envoyés si elle a réussi ou -1 si elle a rencontré une erreur.
Il s'agit d'une fonction surchargée.
© 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.