智能家居网络系统设计(三)

我还是按照这个程序的顺序来讲解,方便大家理解 一点,在这里得说明下boa服务器只是一个平台,只要搭建好了就可以不用去管它,我们只需要写cgi-bin和html文件,我们在上一篇文章中网页已经做好了,当我们点击提交按钮的时候,程序会去执行/etc/boa/cgi-bin目录下的login.cgi脚本文件,(为什么是这个文件,我们在上篇文章已经制定了这个脚本来处理数据),下面我们就来写这个脚本程序。

login.c文件:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
char *str_len=NULL;
int len=0;
char buf[100]="";
char user[20]="";
char passwd[20]="";

printf("%s\r\n\r\n","Content-Type:text/html");    /*固定格式,不用去管他,但是注意这条语句前后要空两行*/
printf("<html>\n<head>\n<title>CGI3:登录结果</title></head><br>\n"); /* 可以用printf打印网页,但是要按照 html格式打印,也可以网页保存在一个数组中来打印,后面文章中将会讲解,这里是打印新网页的标题*/
str_len = getenv("CONTENT_LENGTH");/* 这个很重要获取环境变量,是获取我们开始登陆信息 */
if( (str_len==NULL)  || (sscanf(str_len, "%d", &len)!=1) || (len>80) )  /*这里注意下sscanf的用法*/
printf("sorry!error!");
fgets(buf, len+1, stdin);
sscanf(buf, "name=%[^&]&password=%s", user,passwd);   /*把用户名保存在user中,把账户保存在passwd,观察这里的name,password。这里不是和网页里面设置的变量对应起来了么,这里只是提取出来吧了*/


if( (strncmp(user,"root",4)==0) && (strncmp(passwd, "111111", 6)==0) )/* 比较登陆用户是否正确 */
{
printf("<script language=\"JavaScript\">self.location='main.cgi';</script>");/* 调用一个新的main.cgi脚本 */
}

else
printf("<h1>Sorry! 用户名或密码错误!");
return 0;
}

编译:# arm-linux-gcc login.c -o login.cgi  (后面我会统一写进一个Makefile中)

在这一章可以这样测试,你在if( (strncmp(user,"root",4)==0) && (strncmp(passwd, "111111", 6)==0) )下面添加打印语句密码正确,和密码错误测试。注释掉打印脚本的那条语句,因为你都还没有写这个脚本,你怎么跳转呢。一定要把脚本文件复制到/etc/boa/cgi-bin目录下面,这是我们之前搭建boa服务器时候规定的文件加。


已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页