Spec-Zone.ru › Qt 5.11

Класс QUdpSocket

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

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

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

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

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)
  • 37 открытых функций унаследовано от QAbstractSocket
  • 47 открытых функций унаследовано от QIODevice
  • 34 открытых функций унаследовано от QObject

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

  • 1 свойство унаследовано от QObject
  • 1 открытый слот унаследовано от QObject
  • 6 сигналов унаследовано от QAbstractSocket
  • 6 сигналов унаследовано от QIODevice
  • 2 сигнала унаследовано от QObject
  • 1 открытая переменная унаследовано от QIODevice
  • 1 открытая переменная унаследовано от QObject
  • 2 статические открытые члены унаследовано от QIODevice
  • 10 статических открытых членов унаследовано от QObject
  • 10 защищенных функций унаследовано от QAbstractSocket
  • 5 защищенных функций унаследовано от QIODevice
  • 9 защищенных функций унаследовано от QObject
  • 2 защищенных переменных унаследовано от 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 = 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 и устанавливает ошибку сокета соответственно.

Примечание: Подключение к группам IPv6-мультикаста без выбора интерфейса не поддерживается во всех операционных системах. Рассмотрите возможность использования перегрузки, где интерфейс указан.

Эта функция была добавлена в 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 и устанавливает ошибку сокета соответствующим образом.

Примечание: Эта функция должна вызываться с теми же аргументами, что и joinMulticastGroup().

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

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

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

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

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

Примечание: Эта функция должна вызываться с теми же аргументами, что и joinMulticastGroup().

Эта функция была добавлена в 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 = nullptr, quint16 *port = 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/archives/qt-5.11/qudpsocket.html

Spec-Zone.ru

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