




免费预览已结束,剩余2页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
lwip1.4.0之httpserver实现及POST实现一、HTTPSERVER的实现lwip默认的httpserver在apps/httpserver_raw主要核心文件为fs.cfs.h(读取相关html相关资源),httpd.chttpd.hhttpd_structs.h为http协议核心文件首先在LWIP协议栈正常运行后需要在main函数中调用httpd_init()初始化Http正常情况下般还需要实现SSI和CGI回调函数的初始工作本人写在一个函数中如下:voidhttp_start(void)http_set_ssi_handler(SSIHandler,g_pcConfigSSITags,sizeof(g_pcConfigSSITags)/sizeof(char*);http_set_cgi_handlers(g_psConfigCGIURIs,sizeof(g_psConfigCGIURIs)/sizeof(tCGI);然在httpd_init()下调用http_start()完成初始化SSI和CGI的工作。其次要使用makefsfile.exe对网页进行编译这个小工具可以从网上下载一个,本人将编译命令写在一个makefsfile.bat批处理文件中每次编译只要运行一下makefsfile.bat具体命令如下:echooffmakefsfile-iweb_pages-o./lwip-1.4.0/src/apps/httpserver_raw/fsdata.h-r-hechoon其中web_pages为所包含的网页文件夹产生的网页数据放在fsdata.h中用于跟工程文件一起编译,-r表示每次编译网页时重写fsdata.h-h表示产生的网页数据中不包含http协议头部因为本人在HTTP中使用的是动态产生HTTP协议头。至此网页完成在浏览器中敲入板子的IP地址便可以看到网页了二、POST方案实现LWIPHTTP协议中默认只支持GET方法但是一般提交表单时都用POST方法而LWIPPOST方案需要自己实现不过LWIP已经需要实现的函数申明在httpd.h中了首先将宏LWIP_HTTPD_SUPPORT_POST设置成1表示支持HTTPPOST方法,需要实现的函数分别为:httpd_post_begin(当接收到一个POST请求时会调用此函数),httpd_post_receive_data(接收HTTPPOST数据),httpd_post_finished(接收完成后调用此函数)具体实现如下:err_thttpd_post_begin(void*connection,constchar*uri,constchar*http_request,u16_thttp_request_len,intcontent_len,char*response_uri,u16_tresponse_uri_len,u8_t*post_auto_wnd)#ifLWIP_HTTPD_CGIinti=0;#endifstructhttp_state*hs=(structhttp_state*)connection;if(!uri|(uri0=0)returnERR_ARG;hs-cgi_handler_index=-1;/此变量为本人自己在structhttp_state添加用于保存CGIhandler索引为-1表示无CGIhandler索引hs-response_file=NULL;/此变量为本人自己在structhttp_state添加用于保存CGIhandler处理完后返回的响应uri.#ifLWIP_HTTPD_CGIif(g_iNumCGIs&g_pCGIs)for(i=0;icgi_handler_index=i;/找到响应的CGIhandler将其保存在cgi_handler_index以便在httpd_post_receive_data中使用break;if(i=g_iNumCGIs)returnERR_ARG;/未找到CGIhandler#endifreturnERR_OK;#defineLWIP_HTTPD_POST_MAX_PAYLOAD_LEN512staticcharhttp_post_payloadLWIP_HTTPD_POST_MAX_PAYLOAD_LEN;staticu16_thttp_post_payload_len=0;err_thttpd_post_receive_data(void*connection,structpbuf*p)structhttp_state*hs=(structhttp_state*)connection;structpbuf*q=p;intcount;u32_thttp_post_payload_full_flag=0;while(q!=NULL)/缓存接收的数据至http_post_payloadif(http_post_payload_len+q-lenpayload,q-len);http_post_payload_len+=q-len;else/缓存溢出置溢出标志位http_post_payload_full_flag=1;break;q=q-next;pbuf_free(p);/释放pbufif(http_post_payload_full_flag)/缓存溢出则丢弃数据http_post_payload_full_flag=0;http_post_payload_len=0;hs-cgi_handler_index=-1;hs-response_file=NULL;elseif(hs-post_content_len_left=0)/POST数据已经接收完毕则处理if(hs-cgi_handler_index!=-1)count=extract_uri_parameters(hs,http_post_payload);/解析hs-response_file=g_pCGIshs-cgi_handler_index.pfnCGIHandler(hs-cgi_handler_index,count,hs-params,hs-param_vals);/调用解析函数http_post_payload_len=0;elsehs-response_file=NULL;http_post_payload_len=0;returnERR_OK;voidhttpd_post_finished(void*connection,char*response_uri,u16_tresponse_uri_len)structhttp_state*hs=(structhttp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 春季养生义诊活动方案策划
- 格瓦斯整合营销方案
- 小型房地产企业管理制度
- 儿童秋衣秋裤活动方案策划
- 十月营销推广方案模板
- 铃木摩托车营销方案模板
- 人造草坪组织施工方案
- 天津趣味跑活动策划方案
- 成华区商业咨询方案公示
- 2025年注册会计师(CPA)考试会计科目真题再现试卷及解析
- 核心素养视域下美术学科“五环式”教学研究
- 《财务大数据分析》教案
- 肥胖症诊断与治疗(2024版)指南解读
- 颅脑CT检查技术讲解
- 2025年高中数学说题比赛系列课件
- 临期品处理办法及流程
- 压裂泵往复密封动态磨损机理及失效自愈控制技术研究
- 消除三病反歧视培训
- 公司储备干部培训启动大会
- 初中英语1900词汇按词性分类
- 《旅游研究方法课程》-课程教学大纲
评论
0/150
提交评论