• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

http协议的网页软件开发怎么实现

代人凌峰 2019-01-02 浏览量:1089
http协议的网页软件开发怎么实现?就是浏览器输入一个地址来打开在线软件,并可以通过软件来控制硬件,比如打开led灯,要用到什么开发工具和语言,有没有快速入门的方法。
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • HTTP属于高级的应用协议了,为了使用这种高级协议,你必须加载整个协议栈才能实现,从底层的PHY,到MAC,ARP,IP,TCP/UDP,最后才是HTTP,如果要支持PING还得加载IGMP。最好是直接使用现成的库,STM32的库里应该是有TCP/IP V4的包可以用的。用了库以后,只要设置好网络地址,就可以着手HTTP的操作了。HTTP,就是通过TCP连接方式进行通信的一个协议。学习它的协议头格式,可以完成与浏览器的交互,另外要想做出精美的网页,还得会HTML和CSS,要快速入门,需要会的东西也挺多的。要准确的回答你的问题也挺难的,毕竟这里都不是一两句话能说清楚的东西,只能大概给你搭了一个架子。

    细节上来说,我就只介绍一下WEB控制硬件的核心重点:

    例如,你要用按钮控件来开灯,那么你在HTML页面中可能会写如下的代码:

    <form method="POST" action="ProcessLED">
    <input type="submit" name="LED" value="开灯" />
    </form>

    其中method选择了POST方式,就是隐含提交的,但是这会在HTTP头中附带的POST参数集中看到表单中所有的项目,此例中则会看到有“LED=开灯”这样的数据(HTTP头上还有很多其它信息,我这里只是强调数据中包含这一信息),然后,你的程序就根据读取到的这一信息来处理打开LED灯的硬件操作,怎么打开LED会单片机应该就知道如何做,不详细讲了。然后因为灯已经开了,并且POST页面提交后实际上是转向action后所指的ProcessLED页面的(在单片机页面上,其实这只是一个标识,只在有文件系统时这才对应一个文件,WEB是根据URL串来区别给出什么回应的),那么既然灯已经是开着的了,那如果要回到刚才那个控制灯的页面上的话,显然不能再显示“开灯”了,所以这里在WEB上要做2件事,第一件事是在ProcessLED的页面中要发送返回的命令,不过我们假设开灯操作不只是一个IO打开,而是要用串口发送给一个下位机去处理带地址控制的多个LED灯之一,那么如果使用重定向直接扔回之前的开关控制页面就是不明智的了,因为重定向很快,甚至还没有来得及得到灯的回应。万一你发送了开灯命令下去,灯超时了,并没有返回ACK之类的状态消息呢?所以这里建议做成阻塞之的,就是说,ProcessLED页面上,先显示一个“正在开灯...”的提示,因为WEB是一次性加载的,不能实时运行,所以需要通过JS或定时刷新的HTTP头来实现页面重载,在ProcessLED页面里内嵌一个用来守候并检测状态的子框架,子框架里读取开灯的结果,并使用JS(可能涉及AJAX的概念,具体请参考相关教程,这里不讲太深)来回调至浏览器前台,如果开灯失败,则可以通过top.location.href扔到报错页上,如果你的系统能够知道原因,还可以在那里写下失败的原因,例如“您要开的灯在5秒内没有回应主机的请求,开灯失败,请检查远端LED灯是否已经上电。”

    如果成功了呢?可以先alert一个消息告诉用户“开灯成功”,然后就是我刚才说的2件事中的第2件了,重新显示控制灯的页面(也就是前面给出代码的那个页)时,value就不能再是“开灯”了,因为灯已经开着了,你要再操作它,显然是关灯对不对?没错,所以这里要改成关灯。而ProcessLED再收到这个按钮事件时,因为值是关灯,所以操作也不同了,大致同开灯的操作,不再重复介绍。

    这大概就是使用HTTP协议来控制硬件的一个Flash The LED例程文字版吧~

    • 发布于 2019-01-03
    • 举报
    • 评论 0
    • 2
    • 0

其他答案 数量:10
  • 你的硬件平台是什么?如果是单片机,最简单的是用C自己写一个HTTP服务器,响应GET并且发送HTML数据组成网页

    如果不想自己写可以看看goAhead纯C写的HTTP服务器,自己再写HTML网页和响应部分就行

    如果是嵌入式linux,可以考虑移植Boa,或者其他嵌入式服务器,用python或者C/C++的程序做后端,解析网页命令并执行

    如果是更高级的发行版Linux,可以考虑用nginx或者其他更高级的HTTP服务器

    • 发布于2019-01-03
    • 举报
    • 评论 0
    • 4
    • 0

  • 首先要会移植LWIP

    宏LWIP_HTTPD要开启

    通过网页控制单片机要开启LWIP_HTTPD_CGI宏


    然后要了解单片机端CGI函数的实现方法。还要会一点点网页制作——我在用FrontPage

    快速入门的方法我也在找。主要是对网页端几乎完全不懂。

    • 发布于2019-01-03
    • 举报
    • 评论 0
    • 1
    • 0

  • 在我的文章中有一个完整的例子。//www.icxbk.com/article/detail?aid=152

    不过这个问题其实是一个很大的内容,包括了很多方面的知识。最简单的来说

    1. 本身嵌入系统的控制,即首先你要实现 嵌入系统控制灯光开关,并提供1个调用接口(可以被远程调用,相当于一个可以远程控制的开关)

    2. 远程调用这个接口有很多方式,比如直接的C/S( 客户端/服务器) 模型,与之对应的就是B/S(浏览器/服务器)模型,其实浏览器是一种特殊的客户端而已。但其本质还是向指令接收处理服务端发生指令信息,这个其实和直接控制没有本质的区别,只是路径不同而已(即和直接连线开关控制没有本质区别)。至此实现的技术问题转换到路径处理上的技术问题啦。这又涉及相应http协议服务与UI处理,以及其上的为了安全的一系列处理。比较好的是相关处理已经有很多比较成熟的框架方便开发,只需要你实现前面1中的处理和接口,然后对接起来就可以啦(就像我文章中的一样)


    • 发布于2019-01-03
    • 举报
    • 评论 0
    • 1
    • 0

  • 看到正点原子有这种例程。应该是单片机上实现HTTP应用,然后网页打开后,请求数据,单片机传送状态和数据,网页刷新显示完成。
    • 发布于2019-01-03
    • 举报
    • 评论 0
    • 1
    • 0

  • 网页里面也可以调用后台程序,或者一些脚本,后台可以访问单片机的数据。
    • 发布于2019-01-04
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果在Linux上面跑一个这种服务器就比较容易,但是要在单片机上面实现就比较困难了
    • 发布于2019-01-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 最好用Python做网站后台,这样可以方便直接访问单片机,但是你如果直接在单片机上开发一个这样的系统非常难,建议用linux搭建web服务器,自己写后台
    • 发布于2019-01-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 网页可以调用进程,后台程序,访问单片机,但是做系统有难度
    • 发布于2019-01-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 直接用对应的服务器后台,通过对应的后台来传输数据访问MCU就可以了
    • 发布于2019-02-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 自己要写这么多东西比较难,还是直接用专门的网页接口好一点
    • 发布于2019-02-16
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

http协议的网页软件开发怎么实现