Я использую 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
}
}
Из документации 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
}