Трансляция больших данных с помощью сокетов Qt

Я использую QT. Мне нужно передавать данные, поэтому я стараюсь использовать QUdpSocket, Но данные могут быть слишком большими (после writeDatagram QUdpSocket::error возвращается DatagramTooLargeError). Я делю данные и звоню writeDatagram несколько раз по частям. Но полученный сокет получает данные только один раз, только первый пакет. Получить код

connect(&m_socketReceiver, &QUdpSocket::readyRead, this, &LocalNetSharing::onDataRead);

void LocalNetSharing::onDataRead()
{
while (m_socketReceiver.hasPendingDatagrams())
{
QByteArray datagram;
datagram.resize(m_socketReceiver.pendingDatagramSize());

m_socketReceiver.readDatagram(datagram.data(), datagram.size());
//process data
}
}

1

Решение

Из документации Qt о QUdpSocket Учебный класс :

Примечание: входящая датаграмма должна быть прочитана при получении
сигнал ReadyRead (), в противном случае этот сигнал не будет
следующая дейтаграмма

Таким образом, кажется, что вы не читаете всю дейтаграмму в каждом вызове onDataRead,

Вы не указываете хост и порт в readDatagram, Я не уверен, является ли это причиной, но правильная форма:

while (m_socketReceiver.hasPendingDatagrams())
{
QByteArray datagram;
datagram.resize(m_socketReceiver.pendingDatagramSize());
m_socketReceiver.readDatagram(datagram.data(), datagram.size(), host, &port);
//process data
}
1

Другие решения


По вопросам рекламы [email protected]