UDP (User Datagram Protocol) — это легкий, ненадежный, ориентированный на дейтаграммы протокол без установления соединения. Его можно использовать, когда надежность не важна. QUdpSocket является подклассом QAbstractSocket, который позволяет отправлять и получать дейтаграммы UDP. Наиболее распространенным способом использования этого класса является привязка к адресу и порту с использованием bind(), а затем вызова writeDatagram() и readDatagram() / receiveDatagram() для передачи данных. Сокет вызывает сигнал bytesWritten() каждый раз, когда дейтаграмма записывается в сеть. Для отправки дейтаграммы, необязательно вызывать bind(). Сигнал readyRead() вызываются когда получены дейтаграммы. В этом случае hasPendingDatagrams() возвращает true. Вызвав pendingDatagramSize(), чтобы получить размер первой ожидающей дейтаграммы, и readDatagram или receiveDatagram(), чтобы прочитать ее.
Пример использования QudpSocket
Рассмотрим фрагмент кода для отправки дейтаграммы:
void initSocket() { udpSocket = new QUdpSocket(this); } void sendPendingDatagrams( QByteArray & data ) { QNetworkDatagram datagram; datagram.setDestination(QHostAddress::LocalHost, 8877); datagram.setData(data); udpSocket->writeDatagram(datagram); }
Рассмотрим фрагмент кода для получения дейтаграммы:
void initSocket() { udpSocket = new QUdpSocket(this); udpSocket->bind(QHostAddress::LocalHost, 7788); connect(udpSocket, SIGANL(readyRead()), this, SLOT(readPendingDatagrams())); } void readPendingDatagrams() { while (udpSocket->hasPendingDatagrams()) { QNetworkDatagram datagram = udpSocket->receiveDatagram(); processTheDatagram(datagram); } } void processTheDatagram(QNetworkDatagram & datagram) { qDebug() << datagram.data(); }