预期结果:使用Web服务器从C发送一个GPS数据结构,并将数据(lat,long等)显示在网页。解析通过Web服务器发送到(JSON或JavaScript)变量的C字符数组
使用: Linux,用于Web服务器的libwebsockets(LWS)库。 C代码是作为LWSWS(网络服务器)应用程序中的独立插件实现的。
当前对项目的理解/工作:将结构从插件转换为char数组并尝试将数组解析为原始结构的各个成员(使用JSON)。然后在网页上显示每个变量。
我是Linux,LWS,HTML,JavaScript和JSON的新手。我可以使用JSON或Javascript来处理变量,无论哪个更合理。我并不完全确定项目这一部分的任何一方(C/JS)的计划。
传输此信息并转换为在网页上使用的最佳方式是什么?
这里是我的结构:
struct per_session_data__gps_rcvr {
struct time_struct{
int month;
int day;
int year;
int hour;
int minute;
double second;
}time;
double latitude;
char lat_indicator;
double longitude;
char lon_indicator;
double heading;
int quality;
int satellites;
};
发送结构出,转换为字符指针:
// Write GPS data to GUI
n = lws_snprintf((char *)p, sizeof(buf) - LWS_PRE, "%s", (char *)pss);
m = lws_write(wsi, p, n, LWS_WRITE_TEXT);
if (m < n) {
lwsl_err("ERROR %d writing to di socket\n", n);
return -1;
}
break;
测试代码,我修改出现在一个变量来接收数据称为“味精”。我假设我需要将char数组中发送的数据解析为对应于原始结构成员的块。然后我可以在网页上显示每条GPS数据。
var socket_gps;
if (use_lws_meta)
socket_gps = lws_meta.new_ws("", "gps-rcvr-protocol");
else
socket_gps = new_ws(get_appropriate_ws_url(""), "gps-rcvr-protocol");
try {
socket_gps.onopen = function() {
document.getElementById("wsdi_statustd").style.backgroundColor = "#40ff40";
document.getElementById("wsdi_status").innerHTML =
" <b>websocket connection opened</b><br>" +
san(socket_gps.extensions);
}
socket_gps.onmessage =function got_packet(msg) {
document.getElementById(" **VARIABLE GOES HERE** ").textContent = msg.data + "\n";
}
socket_gps.onclose = function(){
document.getElementById("wsdi_statustd").style.backgroundColor = "#ff4040";
document.getElementById("wsdi_status").textContent = " websocket connection CLOSED ";
}
}
catch(exception) {
alert('<p>Error' + exception);
}
请让我知道是否有更好的方式来发送出来的数据,从C,和/或如果我已经正确配置的数据。在我的研究中,有人提到数据可能以二进制形式发送,但发送纯文本消息和使用JSON似乎是一个更好的计划。
看起来JSON可以“串化”信息,但前提是它已经输入或以JavaScript格式输入了吗?我不确定。我还没有看到任何方法来解析出一个char数组,一次一定数量的字符,并将这些段保存为HTML端的变量。这正是我所希望的。
谢谢您的建议!