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();
}
