打印

从单片机的角度 理解web服务器

[复制链接]
2883|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
    花了一个暑假的时间 终于把基于stm32的web服务器做好了,虽然也没什么用,但还算也学习到了些东西。额,我使用的硬件是stm32+28j60   软件协议时uip  编辑器是keil   仿真器是jlink 开发板是自己画的。    使用浏览器访问web服务器时,单片机是服务器的主机,电脑是从机,端口统一采用80端口;在uip里是这样处理的:
void httpd_init(void)
{
  fs_init();
  
  /* Listen to port 80. */
  uip_listen(HTONS(80));
}
/*-----------------------------------------------------------------------------------*/
void httpd_appcall(void)
{
    ushort j;
    post_func_t post_func;


    switch(uip_conn->lport) {
        /* This is the web server: */
    case HTONS(80):

  。。。。。。。。。。。。。。


监听80端口   ,如果有连接 就进行处理。


处理的过程 大概就是 先判断是 get命令 ,还是post 然后再进行相应的处理。


比如如果是get命令,就判断后面跟随的是请求哪个网页,根据名称 找到对应的网页。网页在单片机里是以文件的形式存放,如下:


const struct {
    char *name;
    const uchar *file_ptr;
    ushort len;
    file_type_t type; /* DYNAMIC:    contains variable data and needs processing
                         STATIC:     contains static data, no processing needed
                         STATIC_SPC: contains static data, but must be password protected.
                         DYNAMIC_NOSPC: contains variable data, but needs no password
                      */
} file_dir [] = {
    (char *)"index.htm",     index_htm,               INDEX_SIZE,                 DYNAMIC_NOSPC,
    (char *)"400.htm",       http_status_400,         sizeof(http_status_400),    STATIC,
    (char *)"404.htm",       http_status_404,         sizeof(http_status_404),    STATIC,
    (char *)"501.htm",       http_status_501,         sizeof(http_status_501),    STATIC,
    (char *)"503.htm",       http_status_503,         sizeof(http_status_503),    STATIC,
    (char *)"password.htm",  password_htm,            PASSWORD_SIZE,              STATIC,
#if TRANSIT_WEB_TIMEOUT
    (char *)"duplicate",     duplicate_htm,           DUPLICATE_SIZE,             STATIC,
#endif
                (char *)"left.htm",      left_htm,                LEFT_SIZE,                  STATIC,
                (char *)"top.htm",       top_htm,                 TOP_SIZE,                   DYNAMIC_NOSPC,
                (char *)"bg.gif",               bg_gif,                  BG_SIZE,                    STATIC,
                (char *)"pwconfirm",     passwordConfirmation_htm,PASSWORDCONFIRMATION_SIZE,  STATIC,
                (char *)"sys",           sys_htm,                 SYS_SIZE,                   DYNAMIC,
                (char *)"postdemo",      postdemo_htm,            POSTDEMO_SIZE,              DYNAMIC,
    (char *)"get",           get_htm,                 GET_SIZE,                   DYNAMIC_NOSPC,
                        (char *)"get_no",           get_htm_no,                 GET_SIZE,                   STATIC_SPC,
    (char *)"upload",        upload_htm,              UPLOAD_SIZE,                STATIC_SPC,
                (char *)"uploaddone",    uploaddone_htm,          UPLOADDONE_SIZE,            DYNAMIC,

};



这个文件结构体的意思是:文件以 名称 、 文件指针、 长度 、类型 这四种格式存放,比如:(char *)"left.htm",      left_htm,                LEFT_SIZE,                  STATIC, 这是一个名字为left的htm网页,地址是left_htm(一个数组),长度是一个宏定义值,静态网页。


如果 有get请求这个网页,那么uip(协议栈) 就会把这个网页 返回回去。


先简单点吧,后面陆续再上详细资料








QQ截图20150823211104.png (45.51 KB )

QQ截图20150823211104.png

相关帖子

沙发
jrcsh| | 2015-8-24 01:29 | 只看该作者
WEB ~~~~~~ 能支持多少个用户~~~同时访问

使用特权

评论回复
板凳
gonghaixu|  楼主 | 2015-8-24 15:30 | 只看该作者
目前连接一个 用户   ,连5个应该没问题。 单片机主要针对硬件 要求可靠,性能肯定跟服务器比不了

使用特权

评论回复
地板
gonghaixu|  楼主 | 2015-8-26 22:13 | 只看该作者
终于啊把硬件和web 调试好了

主页.png (25.85 KB )

主页.png

web.png (689.07 KB )

web.png

控制界面.png (43.79 KB )

控制界面.png

使用特权

评论回复
5
gonghaixu|  楼主 | 2015-8-26 22:16 | 只看该作者
我的学习思路是以实现某样功能为导向,如果以概念为导向,学习太枯燥 了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

11

帖子

1

粉丝