移动物体监控系统-sprint4嵌入式web服务器开发
一、BOA嵌入式服务器的移植
step1:下载BOA服务器并解压,进入boa下面的src目录,执行./configure生成必须的配置文件以及Makefile
step2:修改Makefile文件
cc=arm-linux-gcc
cpp=arm-linux-gcc -E
step3:编译make
编译时出错:util.c:100:1:error:posting "t" and "->" does not give a vaild preprocessing token
将util.c文件中 time-offset=TIMEZONE_OFFSET(t) 注释掉,改为time_offset=0;
step3:将编译生成的boa可执行文件拷贝到根文件系统的/sbin/目录中
step4:配置BOA
将boa.conf拷贝到根文件系统的/etc/boa目录下。改变的配置项:
a.DocumentRoot /web/指明开发板网页路径
b.user Group 注释掉
c.Mime Type 媒体文件 设置为 /dev/null
d.Errorlog 错误日志文件 设置为 /dev/null(设置为/dev/consoce表示错误打印到终端)
e.Access log 访问日志 设置为/dev/null
step5:开发板运行"#boa",浏览器登录开发板IP-192.168.19.127,即可登录嵌入式web服务器的网页设计界面。
二、CGI快速入门-网页控制

控制流程:1、用户浏览器---(请求连接)--->web服务器 (web服务器包括a.供浏览器登录的网页界面程序,b.共服务器调用的CGI程序(扩展服务器功能));
2、浏览器登录的微博服务器指定的网页界面,给予指令-->调用设定CGI程序进行控制;
3、获取的返回结果->web服务器发送到网络中,用户即可通过浏览器远程获取数据信息。
三、CGIC库移植
step1:解压CGIC库
step2:修改Makefile
cc=arm-linux-gcc
AR=arm-linux-ar
RANLIB=arm-linux-ranlib
arm-linux-gcc cgictest.o -o cgictest.cgi ${LIBS}
arm-linux-gcc capture.o -o capture ${LIBS}
step3:拷贝libcgic.a到根文件系统中
step4:BOA配置文件修改(boa.conf)
scriptAlias /cam/ /web/cam/ (指明CGI程序路径)
step5:运行boa程序,在pc的浏览器上输入开发板IP地址 /cam/cgictest.cgi,网页正常打开则表明boa和cgic移植成功。
四、CGI程序设计
其中,网页界面.html、获取监控图片和视频的cgi程序开发
step1:网页界面在原有的indx.html中修改
<a class="menu" href="/cam/image.cgi"> //获取图片的程序,跳转运行/CGI程序
step2:CGI程序:主程序cgiMain()下
1、print_file(cgiOut,"../top.html"); //加头,将top.html内容打印到cgiOut
2、total = list_pic("/mnt/sd","jpg"); //将图片加入显示列表
3、if (cgiFormSubmitClicked("gopage") == cgiFormSuccess) //处理用户的选择请求
4、show_pic(start,end,total); //显示图片
5、print_file(cgiOut,"../bottom.html"); //加尾,将bottom.html内容打印到cgiOut
step3:编译生成.cgi文件 arm-linux-gcc -L ./cgic205/ -lcgi -I ./cgic205/image.c -o image.cgi
step4:获取视频的程序开发
(1)<a class="menu" href="/cam/movie.cgi">
(2)fprintf(cgiOut, "<embed src = \" / sd / % s\" autostart = true loop = true width = \"640\" height =\"480\">< / embed>","01-19700101000405.avi");
在index.html中添加语句(1)
建立movie.c中添加语句(2),编译 arm-linux-gcc -L ./cgic205/ -lcgi -I ./cgic205/movie.c -o movie.cgi
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <cgic.h>
#include <dirent.h>
#include <string.h> struct pic_list
{
char name[];
}g_img[]; //加头,将top.html内容打印到cgiOut
void print_file(FILE *dst_fp,const char *src)
{
FILE* src_fp;
char line[]; src_fp = fopen(src, "r");
while (NULL != fgets(line, , src_fp))
fputs(line, dst_fp);
fclose(src_fp);
} int cmp_sfc(const char* fn,const char *sf)
{
char* tfn = (char*)fn;
for (; *tfn != '.' && *tfn != ; tfn++)
if (*tfn == )
return -;
tfn++; return strcmp(tfn, sf);
} //
int list_pic(const char* path,const char *sfx)
{
//遍历/mnt/sd目录,将所有的图片文件的名字加入列表
DIR* dir;
struct dirent* ptr;
int i = ; //1、打开目录
dir = opendir(path); //2、读取目录中一个文件
while ((ptr = readdir(dir)) != NULL)
{ //3、判断该文件的后缀是否为jpg
if ( == cmp_sfc(ptr->d_name, sfx))
{
//4、如果是图片,将其文件名加入列表
strcpy(g_img[i].name, ptr->d_name);
i++;
}
} return i; } //显示图片
void show_pic(int start, int end, int total)
{
int i,j = ; fprintf(cgiOut, "<tr>");
fprintf(cgiOut, "<td align=center>");
fprintf(cgiOut, "<table border=\"1\">"); for (i = start; i < end + ; i++)
{
if ((j % ) == )
{
fprintf(cgiOut, "<tr>");
fprintf(cgiOut, "<td>");
}
j++; fprintf(cgiOut, "<img src = \"/sd/%s\" width =\"160\" height = \"120\" / >", g_img[i].name); if ((j % ) == )
{
fprintf(cgiOut, "<tr>");
fprintf(cgiOut, "<td>");
}
}
fprintf(cgiOut, "</table>");
fprintf(cgiOut, "<p class=\"little\">-- 第%d页 共%d页 --</p>", start / + , total % ? total / + : total / );
fprintf(cgiOut, "</td>");
fprintf(cgiOut, "</tr>");
} //界面选择
void show_select_form(int total)
{
int i, pgn; pgn = total / ; if (total % )
pgn++; fprintf(cgiOut, "<tr>");
fprintf(cgiOut, "<td align=center>"); fprintf(cgiOut, "<br><form>");
fprintf(cgiOut, "转到第");
fprintf(cgiOut, "<select name=\"selectpage\">");
for (i = ; i < pgn; i++)
fprintf(cgiOut, "<option value=\"opt%d\">%d</option>", i, i + ); fprintf(cgiOut, "</select>");
fprintf(cgiOut, "页 ");
fprintf(cgiOut, "<input type=\"submit\" name=\"gopage\" value=\"go\"/>");
fprintf(cgiOut, "<form>"); fprintf(cgiOut, "</td>");
fprintf(cgiOut, "</tr>");
} int cgiMain()
{
int fd;
int led_control, led_state;
char *data;
int start, end, total;
start = ;
end = ; //3、结果显示信息 //加头
print_file(cgiOut, "../top.html"); //将图片加入显示列表
total=list_pic("/mnt/sd","jpg"); //处理用户的选择请求
if (cgiFormSubmitClicked("gopage") == cgiFormSuccess) { int i, sel;
char** optlist;
char tmp[]; optlist = (char**)malloc(sizeof(char*) * total); for (i = ; i < total; i++)
{
sprintf(tmp, "opt%d", i);
optlist[i] = strdup(tmp);
} cgiFormSelectSingle("selectpage", optlist, total, &sel, ); start = sel * ;
end = start + ;
end = total < end ? total : end;
//fprintf(cgiOut, "<p>s=%d, e=%d</p>", start, end); free(optlist);
} //显示图片
show_pic(start,end,total);
show_select_form(total); //加尾
print_file(cgiOut, "../bottom.html");
return ;
}
移动物体监控系统-sprint4嵌入式web服务器开发的更多相关文章
- 阶段2-新手上路\项目-移动物体监控系统\Sprint1-声音报警子系统开发\第1节-Sprint Backlog规划
根据之前的sprint1-声音报警子系统是相对比较大的一个需求,需要把它进一步细化,然后指定sprint Backlog product Backlog是整个产品的功能列表! sprint Backl ...
- 嵌入式web服务器BOA的移植及应用
嵌入式web服务器子系统 一.嵌入式web服务器的控制流程 如下图所示,嵌入式web服务器可实现通过网络远程控制嵌入式开发板,便捷实用. 控制流程:浏览器 --->>>嵌入式开发板 ...
- 学号20145332 《信息安全系统设计基础》实验五 简单嵌入式WEB服务器实验
实验目的 掌握在 ARM 开发板实现一个简单 WEB 服务器的过程. 学习在 ARM 开发板上的 SOCKET 网络编程. 学习 Linux 下的 signal()函数的使用. 实验内容 学习使用 s ...
- 三种嵌入式web服务器(Boa / lighttpd / shttpd)的 linux移植笔记
一:移植Boa(web服务器)到嵌入式Linux系统 一.Boa程序的移植 1.下载Boa源码 下载地址: http://www.boa.org/ 目前最新发行版本: 0.94.13 ...
- 20145216 20145330 《信息安全系统设计基础》 实验五 简单嵌入式WEB 服务器实验
20145216 20145330 <信息安全系统设计基础> 实验五 简单嵌入式WEB 服务器实验 实验报告封面 实验步骤 1.阅读理解源码 进入/arm2410cl/exp/basic/ ...
- 20145208《信息安全系统设计基础》实验五 简单嵌入式WEB 服务器实验
20145208<信息安全系统设计基础>实验五 简单嵌入式WEB 服务器实验 20145208<信息安全系统设计基础>实验五 简单嵌入式WEB 服务器实验
- 20145210 20145226 《信息安全系统设计基础》实验五 简单嵌入式WEB服务器实验
20145210 20145226 <信息安全系统设计基础>实验五 简单嵌入式WEB服务器实验 结对伙伴:20145226 夏艺华 实验报告封面 实验目的与要求 · 掌握在ARM开发板实现 ...
- 20145221 《信息安全系统设计基础》实验五 简单嵌入式WEB服务器实验
20145221 <信息安全系统设计基础>实验五 简单嵌入式WEB服务器实验 实验报告 队友博客:20145326蔡馨熠 实验博客:<信息安全系统设计基础>实验五 简单嵌入式W ...
- 在Win7系统中搭建Web服务器
局 域网Web服务器的主要功能是实现资源共享,同时借助于局域网服务器访问页面可有效的实现信息的同步.利用Web服务器,我们随时随地都可以将自己的信息 上传到服务器端,让其它关注你的用户能在第一时间内了 ...
随机推荐
- day33 网络编程(下)
目录 上节课回顾: 一.传输层 二.应用层 三.socket 四.如何获取目标ip地址 五.网络通信的流程 上节课回顾: 通过ip地址如何找到另外一台设备 ip地址分为子网部分和主机部分 我们要和其他 ...
- Sql Or NoSql,看完这一篇你就懂了(转五月的仓颉)
前言 你是否在为系统的数据库来一波大流量就几乎打满CPU,日常CPU居高不下烦恼?你是否在各种NoSql间纠结不定,到底该选用那种最好?今天的你就是昨天的我,这也是写这篇文章的初衷. 这篇文章是我好几 ...
- 使用eval将字符串转化成字典时报name 'null' is not defined错误解决办法
在接口测试过程中,为了取值将形如字典形式的字符串使用eval()方法转化成字典方便取值 str={"code":100,"num":1,"data&q ...
- 数据可视化之powerBI基础(八)PowerBI的表格,你真的会用吗
https://zhuanlan.zhihu.com/p/64413000 在PowerBI的可视化对象中,还有两个「表格」对象,表格的作用不仅可以在报表提供明细数据,还经常用来测试度量值的返回结果, ...
- Python面试【315+道题】
第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C++等其他语言的对比? 简述解释型和编译型编程语言? P ...
- 01-flask旅行网系统功能设计
应用flask框架实现一个介绍旅游景区及旅游攻略的网站,一个旅行网包括前台和后台两部分,前台部分用户使用,后台部分管理员使用,系统开发坏境如下: 虚拟环境:virtualenv 数据库:MySQL 开 ...
- 那些非cmake生成的VTK工程存在的让人崩溃的坑
由于cmake和IDE的一些编译选项不同,所以导致我们使用者需要多做一些事情.而且vtk官方也表示: If you are not using CMake to compile your code, ...
- Web Scraping using Python Scrapy_BS4 - Software
Install the following software before web scraping. Visual Studio Code Python and Pip pip install vi ...
- 帮助你更好的理解Spring循环依赖
网上关于Spring循环依赖的博客太多了,有很多都分析的很深入,写的很用心,甚至还画了时序图.流程图帮助读者理解,我看了后,感觉自己是懂了,但是闭上眼睛,总觉得还没有完全理解,总觉得还有一两个坎过不去 ...
- Jquery如何使用动画效果改变背景色
Jquery如何使用动画效果改变背景色 一.问题引入 jquery的animate动画虽然强大,但是无法使用其进行背景色(background-color)的动画效果变化,因为animate动画效果只 ...