全部例程

HTTP Server&NetBIOS

W5500 其他标签

2025/02/12 更新

在 HTTP Server 章节中,我们实现了通过 IP 地址对 W5500 的 web 服务器进行访问。然而,当 W5500 启用 DHCP 时,其 IP 地址会动态变化,这就导致我们无法总是通过固定的 IP 地址来访问该 web 服务器。在 NetBIOS 章节,我们深入学习了 NetBIOS 协议,掌握了如何利用它将 NetBIOS 名称解析为对应的 IP 地址。

基于上述知识,在本篇文章中,我们将把 HTTP Server 与 NetBIOS 功能相结合,为大家详细讲解如何通过 NetBIOS 名称来访问 HTTP 服务器的网页内容,帮助大家解决 IP 地址变动带来的访问难题。

该例程用到的其他网络协议,例如DHCP,HTTP Server,NetBIOS。有关初始化过程,请参考Network install章节,这里将不再详述。

基本工作流程

  1. 当PC端访问的的是一个NetBIOS 名称时,首先会查询自身的 NetBIOS 远程缓存名称表中是否存在记录,存在则将NetBIOS名称替代为IP地址,不存在则PC 端发出 NetBIOS 广播请求。
  2. 当W5500接收到NetBIOS请求后,会检查该请求中的名称是否与自身的名称相符。若相符,W5500会向请求端回复自身的IP地址。
  3. PC端在收到W5500的NetBIOS响应后,会将该响应中包含的 IP 地址和NetBIOS名称建立映射关系存储到 NetBIOS 远程缓存名称表中。
  4. PC端根据NetBIOS 远程缓存名称表中的映射关系,将NetBIOS名称替换成IP进行HTTP请求操作。

实现过程

接下来,我们看看如何具体实现。

步骤1:HTTP服务器初始化


reg_httpServer_webContent((uint8_t *)"index.html", (uint8_t *)index_page);						  // Build HTTP server web pages
httpServer_init(http_tx_ethernet_buf, http_rx_ethernet_buf, _WIZCHIP_SOCK_NUM_ - 1, socknumlist); // Initializing the HTTP server

步骤2:在主循环中执行HTTP服务器和NetBIOS解析


while (1)
{
  int i;
  for (i = 0; i < _WIZCHIP_SOCK_NUM_ - 1; i++)
  {
    httpServer_run(i); // HTTP server test with three-way socket
  }
  do_netbios(SOCK_NETBIOS);
}

当PC端使用NetBIOS名称访问时,首先会发送一个广播请求,W5500收到广播请求后,会在do_netbios函数中进行解析,比对处理,当比对的名称跟自身的NetBIOS名称相符时,返回IP地址给PC端,然后PC端将NetBIOS名称替换为对应的IP地址进行HTTP请求,W5500再根据请求内容,返回对应的响应处理。

运行结果

请注意:

测试实例需要PC端和W5500处于同一网段。

接下来,我们在W5500上实现HTTP_Server&NetBIOS功能。

烧录例程运行后,首先进行了PHY链路检测,然后是通过DHCP获取网络地址并打印网络地址信息, 通过NetBIOS名称解析打印提示解析名称,接着我们打开浏览器,输入W5500/进行即可访问网页信息:

总结

本文讲解了如何在 W5500 芯片上实现 HTTP_Server 与 NetBIOS 功能, 并通过 NetBIOS 访问 HTTP 服务器网页内容,通过实战例程展示了在主循环中并行处理 HTTP 与 NetBIOS 相关事务的过程。感谢观看!

下载本章例程

我们提供完整的工程文件以及配套开发板,方便你随时测试,快速完成产品开发:

开发环境: Keil MDK5 配套开发板