HTTP Server&NetBIOS
在 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章节,这里将不再详述。
基本工作流程
- 当PC端访问的的是一个NetBIOS 名称时,首先会查询自身的 NetBIOS 远程缓存名称表中是否存在记录,存在则将NetBIOS名称替代为IP地址,不存在则PC 端发出 NetBIOS 广播请求。
- 当W5500接收到NetBIOS请求后,会检查该请求中的名称是否与自身的名称相符。若相符,W5500会向请求端回复自身的IP地址。
- PC端在收到W5500的NetBIOS响应后,会将该响应中包含的 IP 地址和NetBIOS名称建立映射关系存储到 NetBIOS 远程缓存名称表中。
- 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 相关事务的过程。感谢观看!