3

我必须通过单个 HTTP 请求实时流式传输数据。目标设备仅在请求如下时处理数据:

POST ...
Content-Type:...
Content-Length:9999999
Connection:Keep-Alive
Cache-Control:no-cache
Authorization:...

<data>
<data>
<data>
...

setFixedLengthStreamingMode(9999999);在 Java 中,我必须做一些 hack 才能使用对象上的函数使其工作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;所以我错过了一些东西,但是什么?任何想法?

4

0 回答 0