Spec-Zone.ru › Qt 5.9

Класс QUdpSocket

Класс QUdpSocket предоставляет сокет UDP. Подробнее...

Заголовок: #include <QUdpSocket>
qmake: QT += network
Наследует: QAbstractSocket
  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются реентерабельными.

Открытые функции

QUdpSocket(QObject *parent = Q_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 = Q_NULLPTR, quint16 *port = Q_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)
  • 37 открытых функций унаследовано от QAbstractSocket
  • 43 открытых функций унаследовано от QIODevice
  • 32 открытых функций унаследовано от QObject

Дополнительные унаследованные члены

  • 1 свойство унаследовано от QObject
  • 1 открытый слот унаследовано от QObject
  • 6 сигналов унаследовано от QAbstractSocket
  • 6 сигналов унаследовано от QIODevice
  • 2 сигнала унаследовано от QObject
  • 11 статических открытых членов унаследовано от QObject
  • 10 защищённых функций унаследовано от QAbstractSocket
  • 5 защищённых функций унаследовано от QIODevice
  • 9 защищённых функций унаследовано от QObject

Подробное описание

Класс QUdpSocket предоставляет сокет UDP.

UDP (протокол пользовательских дейтаграмм) — легкий, ненадежный, ориентированный на дейтаграммы и бессознательный протокол. Его можно использовать, когда надёжность не важна. 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, SIGNAL(readyRead()),
            this, SLOT(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 вы также можете установить виртуальное соединение с UDP-сервером с помощью connectToHost() и затем использовать read() и write() для обмена дейтаграммами без указания получателя для каждой дейтаграммы.

Примеры Отправитель широковещательных сообщений, Получатель широковещательных сообщений, Отправитель мультимедийных сообщений и Получатель мультимедийных сообщений иллюстрируют, как использовать QUdpSocket в приложениях.

См. также QTcpSocket и QNetworkDatagram.

Документация по членам-функциям

QUdpSocket::QUdpSocket(QObject *parent = Q_NULLPTR)

Создаёт объект QUdpSocket.

parent передаётся конструктору QObject.

См. также socketType().

[virtual] QUdpSocket::~QUdpSocket()

Удаляет сокет, закрывая соединение при необходимости.

См. также close().

bool QUdpSocket::hasPendingDatagrams() const

Возвращает true если хотя бы одна дейтаграмма ожидает чтения; в противном случае возвращает false.

См. также pendingDatagramSize() и readDatagram().

bool QUdpSocket::joinMulticastGroup(const QHostAddress &groupAddress)

Подключается к группе мультимедиа, заданной groupAddress, на стандартном интерфейсе, выбранном операционной системой. Сокет должен быть в состоянии BoundState, иначе произойдёт ошибка.

Обратите внимание, что если вы пытаетесь присоединиться к IPv4-группе, ваш сокет не должен быть привязан с помощью IPv6 (или в режиме двойного подключения, с использованием QHostAddress::Any). Вместо этого используйте QHostAddress::AnyIPv4.

Эта функция возвращает true при успехе; в противном случае возвращает false и устанавливает ошибку сокета соответствующим образом.

Эта функция была добавлена в Qt 4.8.

См. также leaveMulticastGroup().

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

Это перегруженная функция.

Подключается к адресу мультимедиа groupAddress на интерфейсе iface.

Эта функция была добавлена в Qt 4.8.

См. также leaveMulticastGroup().

bool QUdpSocket::leaveMulticastGroup(const QHostAddress &groupAddress)

Выходит из многоадресной группы, заданной groupAddress, на интерфейсе по умолчанию, выбранном операционной системой. Сокет должен быть в состоянии BoundState, иначе произойдёт ошибка.

Функция возвращает true при успешном выполнении; в противном случае возвращает false и устанавливает ошибку сокета соответственно.

Функция была добавлена в Qt 4.8.

См. также joinMulticastGroup().

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

Это перегруженная функция.

Выходит из многоадресной группы, заданной groupAddress, на интерфейсе iface.

Функция была добавлена в Qt 4.8.

См. также joinMulticastGroup().

QNetworkInterface QUdpSocket::multicastInterface() const

Возвращает интерфейс для исходящих многоадресных данных. Это соответствует параметру сокета IP_MULTICAST_IF для сокетов IPv4 и параметру сокета IPV6_MULTICAST_IF для сокетов IPv6. Если ранее не был задан интерфейс, функция возвращает недействительный QNetworkInterface. Сокет должен быть в состоянии BoundState, в противном случае возвращается недействительный QNetworkInterface.

Функция была добавлена в Qt 4.8.

См. также setMulticastInterface().

qint64 QUdpSocket::pendingDatagramSize() const

Возвращает размер первого ожидающего UDP-датаграммы. Если датаграмма недоступна, функция возвращает -1.

См. также hasPendingDatagrams() и readDatagram().

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

Получает датаграмму размером не более maxSize байтов и сохраняет её в data. Адрес и порт отправителя сохраняются в *address и *port (если указатели не равны 0).

Возвращает размер датаграммы при успехе; иначе возвращает -1.

Если maxSize слишком мал, остальная часть датаграммы будет потеряна. Для предотвращения потери данных, вызовите pendingDatagramSize() для определения размера ожидающей датаграммы перед её чтением. Если maxSize равен 0, датаграмма будет отброшена.

См. также writeDatagram(), hasPendingDatagrams() и pendingDatagramSize().

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

Получает датаграмму размером не более maxSize байтов и возвращает её в объекте QNetworkDatagram вместе с адресом и портом отправителя. По возможности, функция также попытается определить адрес назначения датаграммы, порт и количество хопов при приёме.

В случае ошибки возвращает QNetworkDatagram, указывающий на недействительность.

Если maxSize слишком мал, остальная часть датаграммы будет потеряна. Если maxSize равен 0, датаграмма будет отброшена. Если maxSize равен -1 (значение по умолчанию), функция попытается прочитать всю датаграмму.

См. также writeDatagram(), hasPendingDatagrams() и pendingDatagramSize().

void QUdpSocket::setMulticastInterface(const QNetworkInterface &iface)

Устанавливает исходящий интерфейс для многоадресных датаграмм на интерфейс iface. Это соответствует параметру сокета IP_MULTICAST_IF для сокетов IPv4 и параметру сокета IPV6_MULTICAST_IF для сокетов IPv6. Сокет должен быть в состоянии BoundState, иначе функция ничего не делает.

Функция была добавлена в Qt 4.8.

См. также multicastInterface(), joinMulticastGroup() и leaveMulticastGroup().

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

Отправляет датаграмму из data размером size на хост address по порту port. Возвращает количество отправленных байтов при успехе; иначе возвращает -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 в случае ошибки.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qudpsocket.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API