繁体   English   中英

使用 libcurl c++ 发送到服务器浮点数组

[英]Send to server float array using libcurl c++

我正在使用 portaudio 回调,我定期接收音频缓冲区并将其存储在main_buffer上。 我只为 curl 设置了下面的设置,并且只使用CURLOPT_POSTFIELDS设置浮动缓冲区,然后再使用curl_easy_perform发送它。 在服务器端,我使用的是 python django:

float main_buffer[256];

url_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, URL);

//portaudio periodic callback
callback(){
  //...
  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, main_buffer);
  curl_easy_perform(curl);
}

服务器中收到的请求在正文中没有内容。 如何以正确的方式发送 main_buffer?

谢谢 !

您需要做的是序列化您发送的数据,然后反序列化您收到的数据。 没有“正确的方法”。 有几种方法具有不同的优点。

在你的情况下,我建议从一个简单的方法开始。 序列化浮点的最简单可移植方法是使用文本编码。 可以表示 arrays 的常用文本格式是 JSON。 例如,数组float[] main_buffer{1.0f, 1.5f, 2.0f}可以编码为[1.0,1.5,2.0]

Python 中的读取部分非常简单:

json.loads(request.body.decode('utf-8'));

C++ 中的写入部分要复杂一些。 在 C++ 中编码 JSON 没有标准方法。 您可以使用基于规范的完整编码器,或者您可以为这种特定情况编写一个临时循环:

std::stringstream ss;
ss << '[';
const char* separator = "";
for (float f : main_buffer) {
    ss << separator << f;
    separator = ",";
}
ss << ']';
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, ss.str().c_str());
curl_slist* headers = nullptr;
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM