0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于MM32F3270以太网HTTP使用

jf_pJlTbmA9 来源:灵动MM32MCU 作者:灵动MM32MCU 2023-09-27 15:48 次阅读

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服务器,实验使用到的硬件如下:

poYBAGIB1SyAHYynAAG39uXw7q0489.png

如图是MB-039(完整原理图可以通过MM32官网下载)的ETH部分。

各个信号引脚对应如下:

pYYBAGIB1S6AEqaVAAAOapdym_Y980.png
poYBAGIB1TGAFwREAAi12qR49zc411.png

我们创建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

pYYBAGIB1TOARaWcAAEnlBhO5H8936.png

PC的地址为:192.168.105.34,在sys_arch.h文件中对DEST_IP_ADDR0 、DEST_IP_ADDR1、DEST_IP_ADDR2、DEST_IP_ADDR3进行修改,DEST_PORT 随意修改。

#define LOCAL_PORT                 2021

#define IP_ADDR0                    192
#define IP_ADDR1                    168
#define IP_ADDR2                    105
#define IP_ADDR3                    35

将程序下载入开发板中,打开浏览器,输入设备地址:192.168.105.35

(1)点击灵动微电子即可跳转到我们的官网

(2)我们按F12来查看网页的信息

wKgaomUT3mOAP8W5AAG4qzNVZHw033.jpg

关注画圈部分,点击灵动微电子可以执行跳转的原因是他的href属性指向的超链接目标的URL为我们的官网地址。同样,使图片显示的方式是类似的,我们先找到一张图片,将他的地址填入img src中,此时图片并非存储在MCU中,是通过网络访问读取的。

我们也可以使用Wireshark进行监视抓取整个过程,选择IP过滤ip.addr==192.168.105.35。

wKgZomUD9lmAJVu3AAZvTMKygwE828.png

可以看到整个过程和前文介绍的步骤完全一致。

实验程序请登录我们的官网下载MM32F3270 SDK,工程路径如下:

~MM32F3270_Lib_Samples_V0.90Demo_appEthernet_DemoETH_RTOSFreertos_http

到这里已经完成了以太网专题的介绍,在样例包中,还提供了其他的样例工程,如:mqtt_onenet、mqtt_baidu、Freertos_dns、Freertos_dhcp、TFTP等。以太网协议本身非常庞大,需要用户花费时间去研究。专题通过对六个简单实验的介绍,起到抛砖引玉的作用,更大的意义在于使刚接触以太网的用户有个着手点,实现更复杂的功能。

来源:灵动MM32MCU


审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343622
  • 以太网
    +关注

    关注

    40

    文章

    5076

    浏览量

    166234
  • 服务器
    +关注

    关注

    12

    文章

    8116

    浏览量

    82509
  • HTTP
    +关注

    关注

    0

    文章

    466

    浏览量

    30315
收藏 人收藏

    评论

    相关推荐

    灵动微课堂 (第185讲) | 基于MM32F3270 以太网 Client使用

    前面介绍了基于Socket方式的以太网通讯,接下来给大家介绍基于TCP包的通讯。内容分为基于MM32F3270以太网Client的使用与基于MM32F3270
    发表于 10-18 11:21

    灵动微课堂 (第186讲) | 基于MM32F3270 以太网 Server使用

    :~\MM32F3270_Lib_Samples_V0.90\Demo_app\Ethernet_Demo\ETH_RTOS\Freertos_Server。我们下章的题目为《基于MM32F3270 以太网
    发表于 10-18 11:28

    灵动微课堂 (第187讲) | 基于MM32F3270 以太网 HTTP使用

    /mm32f_mainstream/mm32f3270/)下载MM32F3270 SDK,工程路径如下:~\MM32F3270_Lib_Samples_V0.90\Demo_app\E
    发表于 10-22 18:59

    MM32F3270系列32位MCU的特点有哪些

    上海灵动微电子推出全新主流型MM32F3270系列32位MCU,此款MM32F3270系列是基于M3内核的32位微控制器,MM32F3270适用于要求高集成度的高性能控制领域,如:工业控制、消防监控
    发表于 11-03 07:20

    灵动微电子MM32F3270系列MCU的特点介绍

    上海灵动微电子推出全新主流型MM32F3270系列32位MCU,此款MM32F3270系列是基于M3内核的32位微控制器,MM32F3270适用于要求高集成度的高性能控制领域,如:工业控制、消防监控
    发表于 03-22 16:57 1945次阅读

    【国产MCU移植】MM32F3270 EVBoard

    【国产MCU移植】MM32F3270 EVBoard
    发表于 12-03 17:21 5次下载
    【国产MCU移植】<b class='flag-5'>MM32F3270</b> EVBoard

    基于MM32F3270 以太网 Client使用

    接下来给大家介绍基于TCP包的通讯。内容分为基于MM32F3270以太网Client的使用与基于MM32F3270以太网Server的使用。
    发表于 02-08 15:10 0次下载
    基于<b class='flag-5'>MM32F3270</b> <b class='flag-5'>以太网</b> Client使用

    MM32F3270 产品手册(中文版)

    MM32F3270 产品手册(中文版)
    发表于 02-23 18:40 0次下载
    <b class='flag-5'>MM32F3270</b> 产品手册(中文版)

    MM32F3270 勘误表(中文版)

    MM32F3270 勘误表(中文版)
    发表于 02-23 18:42 0次下载
    <b class='flag-5'>MM32F3270</b> 勘误表(中文版)

    基于MM32F3270 I2S使用

    基于MM32F3270 I2S使用
    的头像 发表于 09-27 15:50 501次阅读
    基于<b class='flag-5'>MM32F3270</b> I2S使用

    基于MM32F3270以太网Server使用

    基于MM32F3270以太网Server使用
    的头像 发表于 09-27 15:46 301次阅读
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太网</b>Server使用

    基于MM32F3270以太网Client使用

    基于MM32F3270以太网Client使用
    的头像 发表于 09-27 15:44 439次阅读
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太网</b>Client使用

    基于MM32F3270以太网UDP使用

    基于MM32F3270以太网 UDP使用
    的头像 发表于 09-27 15:42 283次阅读
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太网</b>UDP使用

    基于MM32F3270以太网Server_Socket使用

    基于MM32F3270以太网Server_Socket使用
    的头像 发表于 09-27 15:41 263次阅读
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太网</b>Server_Socket使用

    基于MM32F3270以太网Client_Socket使用

    基于MM32F3270以太网Client_Socket使用
    的头像 发表于 09-27 15:37 353次阅读
    基于<b class='flag-5'>MM32F3270</b><b class='flag-5'>以太网</b>Client_Socket使用