2017-10-16 69 views
0

预期结果:使用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端的变量。这正是我所希望的。

谢谢您的建议!

回答

0

像这样:

n = snprintf((char *)p, sizeof(buf), "{\"NameofParam1\":\"%d\",\"NameofParam2\":\"%d\"}", param1, param2); 

这让你一次过你的整个JSON字符串(存储在缓冲区)。只需使用适当的标志(%s,%X,%c,%f等)来捕获您的参数。

相关问题