完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
灵动MM32 灵动MM32MCU 昨天HTTP(Hyper Text Transfer Protocol超文本传输协议)是用于从万维网服务器传输超文本到本地浏览器的传输协议,它基于TCP/IP协议通信,因此也是基于<客户端-服务器>模型运作的。HTTP属于应用层协议,我们可以用它来传输服务器的各种资源,如文本、图片、音频等,具有简单、快捷、灵活、无连接、无状态等优点。 在一次完整的HTTP通信过程中,浏览器与服务器之间大致可以分为七个步骤: 01 建立TCP连接 HTTP工作前,浏览器首先要通过网络与服务器建立连接,该连接通过TCP完成。HTTP属于应用层协议,根据规则只有低层协议建立之后才能进行更深层协议的连接。因此,首先要建立TCP连接,端口号为80。 02 浏览器向服务器发送请求命令 TCP连接成功建立后,浏览器就会向服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1 03 浏览器发送请求头信息 浏览器发送请求命令后,还要以头信息的形式向服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。 04 服务器应答 客户机向服务器发出请求后,服务器会客户机回送应答,例如:HTTP/1.1 200 OK 应答的第一部分是协议的版本号和应答状态码。 05 服务器发送应答头信息 正像客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。 06 服务器向浏览器发送数据 服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着会按照应答头信息所描述的格式发送用户所请求的实际数据。 07 服务器关闭TCP连接 一般情况下,一旦服务器完成了数据,就会关闭TCP连接。 在创建工程前我们还需要了解HTTP请求格式,HTTP请求由三部分构成:请求方法URI协议、请求头、请求正文。 请求方法URI(URL相当于URI的子集)协议 我们使用前文中的例子“GET/sample.jsp HTTP/1.1”。“GET“代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。 请求头 请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。 请求正文 请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文,请求正文中可以包含客户提交的查询字符串信息。 实验使用MB-039开发板,在工程中使用LwIP+FreeRTOS,实验展示如何实现HTTP服务器,实验使用到的硬件如下: 各个信号引脚对应如下: static void http_server_netconn_thread(void* arg) { ********************************************************* do { err = netconn_accept(conn, &newconn); //(1) if (err == ERR_OK) { http_server_netconn_serve(newconn); //(2) netconn_delete(newconn); } } while(err == ERR_OK); ********************************************************* } static void http_server_netconn_serve(struct netconn* conn) { struct netbuf* inbuf; char* buf; u16_t buflen; err_t err; err = netconn_recv(conn, &inbuf); //(3) if (err == ERR_OK) { netbuf_data(inbuf, (void**)&buf, &buflen); if (buflen >= 5 && buf[0] == 'G' && buf[1] == 'E' && buf[2] == 'T' && buf[3] == ' ' && buf[4] == '/' ) { //(4) netconn_write(conn, http_html_hdr, sizeof(http_html_hdr) - 1, NETCONN_NOCOPY); //(5) netconn_write(conn, http_index_html, sizeof(http_index_html) - 1, NETCONN_NOCOPY); //(6) } } netconn_close(conn); //(7) netbuf_delete(inbuf); } 01 等待连接请求 02 执行数据发送的主要函数,工程的主要部分 03 接收客户端(浏览器)发送的数据 04 通过前面五个字节判断是否为请求方法,我们只是为例简单的功能展示不需要去关注正文部分 05 发送应答头信息 06 发送网页信息(html) 07 关闭连接 到这里已经完成了工程的创建,看一下PC的IP地址,设备需要处于同一网段方便测试。打开命令行窗口输入:ipconfig #define IP_ADDR0 192 #define IP_ADDR1 168 #define IP_ADDR2 105 #define IP_ADDR3 35 将程序下载入开发板中,打开浏览器,输入设备地址:192.168.105.35 我们也可以使用Wireshark进行监视抓取整个过程,选择IP过滤ip.addr==192.168.105.35。 实验程序请登录我们的官网(https://www.mindmotion.com.cn/pr ... instream/mm32f3270/)下载MM32F3270 SDK,工程路径如下: ~MM32F3270_Lib_Samples_V0.90Demo_appEthernet_DemoETH_RTOSFreertos_http 到这里已经完成了以太网专题的介绍,在样例包中,还提供了其他的样例工程,如:mqtt_onenet、mqtt_baidu、Freertos_dns、Freertos_dhcp、TFTP等。以太网协议本身非常庞大,需要用户花费时间去研究。专题通过对六个简单实验的介绍,起到抛砖引玉的作用,更大的意义在于使刚接触以太网的用户有个着手点,实现更复杂的功能。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
2249个成员聚集在这个小组
加入小组灵动微电子MM32全系列MCU产品应用手册,库函数和例程和选型表
11703 浏览 3 评论
【MM32 eMiniBoard试用连载】+基于OLED12864的GUI---U8G2
5930 浏览 1 评论
【MM32 eMiniBoard试用连载】移植RT-Thread至MM32L373PS
10965 浏览 0 评论
【MM32 eMiniBoard测评报告】+ 开箱 + 初探
4577 浏览 1 评论
灵动微课堂(第106讲) | MM32 USB功能学习笔记 —— WinUSB设备
4302 浏览 1 评论
[MM32软件] MM32F002使用内部flash存储数据怎么操作?
981浏览 1评论
806浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 22:05 , Processed in 0.558857 second(s), Total 67, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号