gpt4 book ai didi

c++ - 如何将 JSON 发布到 Web 服务器?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:53 24 4
gpt4 key购买 nike

我正在玩 freeboard.io 并尝试制作一个从 URL [待定] 中提取 JSON 数据的小部件。我的原始数据源来自一个基于 iMX6 的 Wandboard,它运行 Linux 并连接到互联网。我想在 Wandboard 上编写一个 C++ 程序,打开一个到 [TBD] 的套接字并发送 UDP 数据包,例如,包含我的传感器数据。我的 JSON 数据结构是这样的:

{
"sensor_a": 1100,
"sensor_b": 247,
"sensor_c": 0
}

你能帮我在 Ubuntu Linux 上使用 C++ 将我的 JSON 数据结构放入 IP 数据包吗?例如,我知道如何在 ascii 中序列化数据结构并构建一个缓冲区来填充 IP 数据包,但我想知道是否有针对云服务执行此操作的标准方法,或者 Azure 与 AWS 是否有所不同? “放置”数据是否需要某种类型的 header 信息?

最佳答案

这是一个非常简单的问题,就像所有不需要外部库进行序列化的简单问题一样。就像@Galik 上面说的,你的问题是如何从客户端向服务器发送一个字符串。此外,对于您的情况,您需要在服务器上有一个 JSON 解析器(来自 JSON 页面的任何 C 或 C++ 解析器都可以,我使用 gason 因为它既快速又简单)。

在 TCP/IP 套接字编程中,您必须让另一部分知道要读取多少字节(在您的情况下是字符)。

我遇到过类似的情况:通过网络发送 JSON。这是示例,JSON“消息”

https://github.com/pedro-vicente/lib_netsockets/blob/master/examples/json_message.cc

在这种情况下,消息的大小具有这种标题格式

nbr_bytes#json_string

其中“json_string”是 JSON 文本,“nbr_bytes”是“json_string”的字符数,“#”是分隔符。

服务器如何解析这个?通过一次读取 1 个字符直到找到“#”分隔符,然后将该字符串转换为数字;然后让套接字 API 读取“nbr_bytes”个字符并退出

例子

100#{json_txt....}

在这种情况下“json_txt”有 100 个字符

这是解析器的代码

std::string read_response(socket_t &socket)
{
int recv_size; // size in bytes received or -1 on error
size_t size_json = 0; //in bytes
std::string str_header;
std::string str;

//parse header, one character at a time and look for for separator #
//assume size header lenght less than 20 digits
for (size_t idx = 0; idx < 20; idx++)
{
char c;
if ((recv_size = recv(socket.m_socket_fd, &c, 1, 0)) == -1)
{
std::cout << "recv error: " << strerror(errno) << std::endl;
return str;
}
if (c == '#')
{
break;
}
else
{
str_header += c;
}
}

//get size
size_json = static_cast<size_t>(atoi(str_header.c_str()));

//read from socket with known size
char *buf = new char[size_json];
if (socket.read_all(buf, size_json) < 0)
{
std::cout << "recv error: " << strerror(errno) << std::endl;
return str;
}
std::string str_json(buf, size_json);
delete[] buf;
return str_json;
}

关于c++ - 如何将 JSON 发布到 Web 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40265379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com