Spec-Zone.ru › Qt 5.6

Класс 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)
void setMulticastInterface(const QNetworkInterface &iface)
qint64 writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)
qint64 writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)
  • 37 общедоступных функций унаследовано от QAbstractSocket
  • 33 общедоступных функций унаследовано от QIODevice
  • 31 общедоступных функций унаследовано от QObject

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

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

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

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

UDP (протокол пользовательских датаграмм) — лёгкий, ненадежный, ориентированный на датаграммы, бессокетный протокол. Он может использоваться, когда надёжность не важна. QUdpSocket — подкласс QAbstractSocket, который позволяет отправлять и получать UDP-датаграммы.

Наиболее распространённый способ использования этого класса — привязка к адресу и порту с помощью bind(), а затем вызов writeDatagram() и readDatagram() для передачи данных. Если вы хотите использовать стандартные функции QIODevice read(), readLine(), write() и т. д., вы должны сначала подключить сокет напрямую к узлу, вызвав connectToHost().

Сокет излучает сигнал bytesWritten() каждый раз, когда датаграмма записывается в сеть. Если вы просто хотите отправить датаграммы, вам не нужно вызывать bind().

Сигнал readyRead() излучается всякий раз, когда приходят датаграммы. В этом случае hasPendingDatagrams() возвращает true. Вызовите pendingDatagramSize() для получения размера первой ожидающей датаграммы и readDatagram() для её чтения.

Примечание: Приходящая датаграмма должна быть прочитана при получении сигнала 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()) {
        QByteArray datagram;
        datagram.resize(udpSocket->pendingDatagramSize());
        QHostAddress sender;
        quint16 senderPort;

        udpSocket->readDatagram(datagram.data(), datagram.size(),
                                &sender, &senderPort);

        processTheDatagram(datagram);
    }
}

QUdpSocket также поддерживает UDP-мультимедиа. Используйте joinMulticastGroup() и leaveMulticastGroup() для управления членством в группе, и QAbstractSocket::MulticastTtlOption и QAbstractSocket::MulticastLoopbackOption для установки параметров TTL и loopback сокета. Используйте setMulticastInterface() для управления исходящим интерфейсом для мультимедиа-датаграмм и multicastInterface() для его запроса.

С помощью QUdpSocket вы также можете установить виртуальное подключение к UDP-серверу с помощью connectToHost(), а затем использовать read() и write() для обмена датаграммами без указания получателя для каждой датаграммы.

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

См. также QTcpSocket.

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

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().

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 QByteArray &datagram, const QHostAddress &host, quint16 port)

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

Отправляет даттаграмму datagram на хост host по порту port.

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

Spec-Zone.ru

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