Я пишу программу, которая отправляет файлы с клиента QT на клиент Android.QByteArray :: number (int) длиной всего два байта
конкретной строке кода записывается длина префикса строки имени файла потока поддерживается между ними с помощью следующего кода:
qDebug() << socket.write(QByteArray::number((qint32)fileName.length()));
Я литым fileName.length()
в qint32
, но по некоторым причинам выше кода записывает только 2 байта в поток сокета (то есть окно консоли показывает 2
от qDebug()
).
Есть ли причина?
Замечание о 'QDataStream': оно не обрабатывает частичную запись и чтение. Таким образом, если у вас нет 100% надежного сетевого подключения (локальный хост или хост домена unix может быть достаточно близок), вы не должны использовать его непосредственно в сетевом сокете. Вместо этого используйте 'QDataStream' в' QByteArray' и отправляйте/получайте это. – hyde
@hyde Предположительно достаточно легко проверить, удалось ли вам после того, как все закончилось? Он не «обрабатывает» частичную запись/чтение, но также не сбой. –
Да, я имею в виду, что невозможно вернуть частичные данные в поток и повторить попытку после того, как поступит больше данных. Состояние 'QDataStream :: ReadCorruptData' является неустранимым, AFAIK. – hyde