对于cJSON 、CGI、Boa就不进行说明了
思路设计
1.将cJSON的.c文件和cJSON的.h文件添加到项目中,如图
2.创建一个自己的.c文件,用于通过CGI实时更新我们的数据。如上图,我取名的是game.c,创建一个html超文本文件,展示web界面。创建一个Makefile文件生成可执行文件
3.在虚拟机中,打开boa服务器,使用命令sudo boa(我配置了路径了,不会的可以参考其他博主),使用netstat -tan进行检测,查看到80端口表示成功
4.在浏览器中输入 IP(虚拟机IP地址)/html文件路径
game.c源码
所有解释都在注释中
#include<stdio.h>
#include<stdlib.h>
#include"cJSON.h"
#include<time.h>
char *get_number(){
char *res;//定义一个字符串指针用于接收json格式的字符串
double num;//定义一个数字
cJSON *root;
srand(time(NULL));//产生一个随机数池,可以使用man手册查看该函数
num=(rand()%10)/10.0+30;//从随机数池中取随机数,并设置范围是30.0~39.9
root=cJSON_CreateObject();//创建一个JSON对象
if (root==NULL)
{//进行出错处理
goto end;
}
cJSON_AddItemToObject(root,"temperature",cJSON_CreateNumber(num));//里面的函数是将num添加到键temperature上,
//外面的函数是键键值对(temperature:num)添加到JSON对象root上
//打印JSON对象root字符串到res中
res=cJSON_Print(root);//这里的res是在对空间上,因为我们经过函数处理后要保留这个值,所以最后是要释放掉这个空间的
end:
cJSON_Delete(root);//删除JSON对象
return res;//返回结果字符串
}
int main(){
char *result;
result=get_number();//调用函数,获取这个随机数
printf("Content-Type:text/html;charset=utf-8\r\n");
printf("\r\n");//http协议请求格式,这样浏览器才能解析出这条信息。
printf("%s\n",result);
free(result);//释放掉这个空间。
return 0;
}
Makefile 源码
TARGET :=game
CROSS_COMPILE :=
CC =$(CROSS_COMPILE)gcc
LD =$(CROSS_COMPILE)ld
OBJS :=game.o
OBJS +=cJSON.o
CFLAGS += -Wall -I./inc
LDFLAGS +=
OUTPUT_DIR =/home/jacky/pro_Web/work/cgi
all:$(TARGET)
$(TARGET):$(OBJS)
$(CC) $(LDFLAGS) $^ -o $@
cp $@ $(OUTPUT_DIR)
%.o:%.c
$(CC) $(CFLAGS) -c $^ -o $@
clean:
rm -f $(TARGET) $(OBJS)
game_Demo.html 源码
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>孵化园室内温度测量</title>
<script src="js/jquery.min.js"></script>
</head>
<body>
<h1>正常体温范围30.0~39.9</h1>
<hr>
<div id="01"><h2>请刷新当前温度</h2></div>
<button id="btn1" type="button">带我,进行刷新</button>
<script>
$(document).ready(function(){
$("#btn1").click(function(){
$.getJSON("/cgi-bin/game",function(data){
console.log(data);
var context="<h2>此刻的温度为:"+data.temperature+"</h2>";
$("#01").html(context);
});
});
});
</script>
</body>
</html>
效果展示
特别说明
孵化园温度是我随便取的,这个不重要,知识最重要。多看注释