HTTP Server&NetBIOS
在 HTTP Server 章节中,我们实现了通过 IP 地址对 W55MH32 的 web 服务器进行访问。然而,当 W55MH32 启用 DHCP 时,其 IP 地址会动态变化,这就导致我们无法总是通过固定的 IP 地址来访问该 web 服务器。在 NetBIOS 章节,我们深入学习了 NetBIOS 协议,掌握了如何利用它将 NetBIOS 名称解析为对应的 IP 地址。
基于上述知识,在本篇文章中,我们将把 HTTP Server 与 NetBIOS 功能相结合,为大家详细讲解如何通过 NetBIOS 名称来访问 HTTP 服务器的网页内容,帮助大家解决 IP 地址变动带来的访问难题。
该例程用到的其他网络协议,例如DHCP,HTTP Server,NetBIOS。有关W55MH32的初始化过程,请参考Network install章节,这里将不再详述。
基本工作流程
- 当PC端访问的的是一个NetBIOS 名称时,首先会查询自身的 NetBIOS 远程缓存名称表中是否存在记录,存在则将NetBIOS名称替代为IP地址,不存在则PC 端发出 NetBIOS 广播请求。
- 当W55MH32接收到NetBIOS请求后,会检查该请求中的名称是否与自身的名称相符。若相符,W55Mh32会向请求端回复自身的IP地址。
- PC端在收到W55MH32的NetBIOS响应后,会将该响应中包含的 IP 地址和NetBIOS名称建立映射关系存储到 NetBIOS 远程缓存名称表中。
- PC端根据NetBIOS 远程缓存名称表中的映射关系,将NetBIOS名称替换成IP进行HTTP请求操作。
实现过程
接下来,我们看看如何具体实现。
步骤1:HTTP服务器初始化
sprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X", net_info.mac[0], net_info.mac[1], net_info.mac[2], net_info.mac[3], net_info.mac[4], net_info.mac[5]);
sprintf(ip, "%d.%d.%d.%d", net_info.ip[0], net_info.ip[1], net_info.ip[2], net_info.ip[3]);
sprintf(sn, "%d.%d.%d.%d", net_info.sn[0], net_info.sn[1], net_info.sn[2], net_info.sn[3]);
sprintf(gw, "%d.%d.%d.%d", net_info.gw[0], net_info.gw[1], net_info.gw[2], net_info.gw[3]);
sprintf(dns, "%d.%d.%d.%d", net_info.dns[0], net_info.dns[1], net_info.dns[2], net_info.dns[3]);
sprintf(page, (char *)index_page, mac, ip, sn, gw, dns);
reg_httpServer_webContent((uint8_t *)"index.html", (uint8_t *)page); // Build HTTP server web pages
httpServer_init(http_tx_ethernet_buf, http_rx_ethernet_buf, 1, socknumlist); // Initializing the HTTP server
步骤2:在主循环中执行HTTP服务器和NetBIOS解析
while (1)
{
httpServer_run(SOCK_HTTPS);
do_netbios(SOCK_NETBIOS);
}
当PC端使用NetBIOS名称访问时,首先会发送一个广播请求,W55MH32收到广播请求后,会在do_netbios函数中进行解析,比对处理,当比对的名称跟自身的NetBIOS名称相符时,返回IP地址给PC端,然后PC端将NetBIOS名称替换为对应的IP地址进行HTTP请求,W55MH32再根据请求内容,返回对应的响应处理。
运行结果
请注意:
测试实例需要PC端和W55MH32处于同一网段。
接下来,我们在W55MH32上实现HTTP_Server&NetBIOS功能。
烧录例程运行后,首先进行了PHY链路检测,然后是通过DHCP获取网络地址并打印网络地址信息,
通过NetBIOS名称解析打印提示解析名称,接着我们打开浏览器,输入W55MH32/进行即可访问网页信息:
总结
本文讲解了如何在 W55MH32 芯片上实现 HTTP_Server 与 NetBIOS 功能, 并通过 NetBIOS 访问 HTTP 服务器网页内容,通过实战例程展示了在主循环中并行处理 HTTP 与 NetBIOS 相关事务的过程。感谢观看!