佛山网站建设哪儿有,网上哪里接app推广单,网页设计考试题目,wordpress免费汉化企业主题您好呀#xff0c;我是小二。本期为大家带来一个 WiFi 应用的实际场景#xff0c;其实在之前「我对 WiFi 驱动移植过程#xff0c;做了一次总结复盘」这篇文章中有简单提过#xff0c;但由于内容较多#xff0c;就单独摘出来了。来自读者的催更????????????我是小二。本期为大家带来一个 WiFi 应用的实际场景其实在之前「我对 WiFi 驱动移植过程做了一次总结复盘」这篇文章中有简单提过但由于内容较多就单独摘出来了。来自读者的催更????????????别着急小二在努力了1 应用场景 我喜欢讲一个东西先来探讨下他的应用场景。毕竟知道了用在哪怎么用才能写好代码嘛哈哈????本次项目实际的应用场景通过手机 APP 连接到设备 WiFi 热点进行设备的参数配置接着结合实际框架拆分需求如下采用 HTTP 协议使用 POST 方法设备端需要作为一个 HTTP 服务器不需要支持 CGI 通过 APP 展示界面即可好了明白了需求接下来就是实现方案了。2 方案论证 刚开始的时候一点头绪都没有。组长指导的一种方案就是在新唐数据手册中看到的采用 Lighttpd 的方案。后来去查资料发现一篇介绍不同 HTTP 服务器的文章挺不错的如下常见的几种嵌入式web服务器https://www.cnblogs.com/quliuliu2013/p/12786301.html2.1 Lighttpd 这块刚开始是同事在搞后来我这边的需求规划出来后就在想能否使用这种方案。毕竟方案是现成的可以节省不少时间。后来经过分析发现 Lighttpd 需要一个单独的进程执行如下图所示Lighttpd 提供了 CGI 接口支持 IE 访问固定界面然后进行参数配置。实际实现方案我认为比较好的方法是Lighttpd 进程接收到参数变更时写入配置文件 A 主业务进程监测文件 A 是否有改变如果检测到改变则读一次数据。具体实现方式参考下图结合实际情况分析1、目前只维护一个主业务进程如果再增加额外的进程则维护成本将大大增加。2、实际不需要 CGI 接口不需要支持 IE APP 做界面显示即可。经过论证此方案较复杂暂且当做最后的备选方案。2.2 cpp-httplib 接着我就去 GitHub 上寻找 HTTP Server 发现 cpp-httplib 这个比较好用的库。GitHub 链接cpp-httplibhttps://github.com/yhirose/cpp-httplib在查看了 ReadMe 文件后很遗憾我用不了????????????提示说 GCC 4.8 及以下版本无法正常编译因为 regex 文件已损坏。。。我去找了找解决方法发现在 GCC 4.9 版本修复了这个问题参考 Stack Overflow 回答如下https://stackoverflow.com/questions/12530406/is-gcc-4-8-or-earlier-buggy-about-regular-expressions没办法了我们当前 GCC 版本是 4.8.3 的肯定不能因为这个库就更换编译器呀那只能再去找找看咯。2.3 httpserver 然后就接着去搜索发现了 httpserver 这个库只有一个 .h 头文件感觉很简单。GitHub 链接httpserverhttps://github.com/jeremycw/httpserver.h分析本质需求发现只需要在主进程中跑一个 HTTP Server 的线程监听固定端口然后采用 HTTP 协议进行通信即可。简要功能如下图所示从上图可以看出1、主进程中单独跑一个 HTTP Server 的线程监听固定端口 8888 2、此线程同时进行数据处理将参数写入文件 A 3、其他业务线程在需要参数时直接去文件 A 获取最新参数即可3 实现方式 具体实现方式参考 ReadMe 文件也很方便实现。简述一下主要流程绑定监听端口号绑定回调函数死循环监听端口当需要关闭 HTTP 服务时通过 flag 标志位改变当前状态关闭 HTTP 服务后需要释放相应资源所有的配置处理接口在 HandleRequest 回调函数中PS我这电脑网络有问题GitHub 一直打不开手机热点也不行暂时还没别的好办法只能麻烦您自己去网页上看啦。4 注意事项 在使用过程中我这遇到一个问题。您看下边这块代码是这样的void hs_init_session(http_request_t* session) {session-flags HTTP_AUTOMATIC;session-parser (http_parser_t){};session-stream (hs_stream_t){};if (session-tokens.buf) {free(session-tokens.buf);session-tokens.buf NULL;}http_token_dyn_init(session-tokens, 32);
}在第 3 、4 行末尾直接就是一个大括号里边什么都没写。然后我的程序在这个地方就一直编译不过去。后来在公司前辈指点下按照下图所示添加了 0 之后就能编译通过了。推测原因是当前编译器使用的 C 标准不支持这么高级的用法。注意需要修改的不止这一处其他地方如有编译报错也需做类似修改。5 总结 针对本次的功能需求最困难的地方在于寻找一个合适的 HTTP Serve 库来使用。过程虽然艰难但也锻炼了自己找东西的能力。好了各位看官本次的分享到此结束如果您还意犹未尽大可从头再看。最后别忘了赏小二一个 赞 和 在看 哦????????????祝您端午安康工作顺利推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号后台回复「1024」获取学习资料网盘链接。欢迎点赞关注转发在看您的每一次鼓励我都将铭记于心~嵌入式Linux微信扫描二维码关注我的公众号