Qt: Как передавать данные по одному HTTP-запросу в реальном времени?
Я должен передавать данные по отдельному HTTP-запросу в режиме реального времени. Целевое устройство обрабатывает данные только тогда, когда запрос подобен:
POST ...
Content-Type:...
Content-Length:9999999
Connection:Keep-Alive
Cache-Control:no-cache
Authorization:...
<data>
<data>
<data>
...
В Java, я должен сделать несколько взломать, чтобы заставить его работать, используя setFixedLengthStreamingMode(9999999);
функция на моем HttpURLConnection
объект. Затем я создаю запрос и заполняю данные тела BufferedOutputStream
объект.
Сейчас я пытаюсь разработать приложение на основе Qt для передачи данных на это устройство, но не могу этого достичь. Я попробовал что-то вроде:
QNetworkRequest networkRequest;
networkRequest.setUrl(/*...*/);
// Set some headers
networkRequest.setHeader(QNetworkRequest::ContentLengthHeader, "9999999");
QIODevice* pIoDevice = new QBuffer(this);
pIoDevice->open(QIODevice::ReadWrite);
QNetworkAccessManager* pNetworkAccessManager = new QNetworkAccessManager(this);
pNetworkAccessManager->post(networkRequest, pIoDevice);
// Then exec current run loop to wait until I manually stop it.
С другой стороны, когда мой продюсер дает мне данные для передачи, я хочу сделать что-то вроде:
pIoDeviceData->write(/* data */);
Проблема в том, что при чтении сетевых трассировок (используя Wireshark) я вижу, что Content-Length
испускается равно 0
поэтому устройство закрывает соединение, и я получаю код ошибки NetworkError::RemoteHostClosedError
; Так что я что-то пропустил, но что? Любая идея?