シングルパート HTTP リクエストでリアルタイムにデータをストリーミングする必要があります。対象のデバイスは、リクエストが次のような場合にのみデータを処理します。
POST ...
Content-Type:...
Content-Length:9999999
Connection:Keep-Alive
Cache-Control:no-cache
Authorization:...
<data>
<data>
<data>
...
setFixedLengthStreamingMode(9999999);
Java では、オブジェクトの関数を使用して機能させるためにハックを行う必要があり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 */);
Content-Length
問題は、(Wireshark を使用して) ネットワーク トレースを読み取ることです。出力が等しいことがわかり0
、デバイスが接続を閉じて、エラー コードが表示されますNetworkError::RemoteHostClosedError
。だから私は何かを逃しましたが、何ですか?何か案が?