全部例程

通过NetBIOS名称访问W55MH32的HTTP服务器

W55MH32

更新于 2026年9月18日

本篇总结

将 HTTP Server 与 NetBIOS 功能结合,使 PC 端可通过 NetBIOS 名称访问 W55MH32 的 HTTP 服务器,解决 DHCP 动态分配 IP 后无法通过固定 IP 访问的问题。

🔑 KEIL MDK、UART调试、硬件TOE引擎、NetBIOS、HTTP、DHCP

硬件平台:本例程基于 W55MH32L-EVB 开发板运行。

采购推荐:点击前往 WIZnet 官方淘宝店铺 选购 W55MH32L-EVB

本示例演示如何在 W55MH32 上将 HTTP Server 与 NetBIOS 功能相结合,通过 NetBIOS 名称解析动态 IP,再用该 IP 发起 HTTP 请求,解决 IP 地址变动带来的访问难题。在 HTTP Server 章节中,我们实现了通过 IP 地址访问 W55MH32 的 web 服务器,然而当启用 DHCP 时 IP 地址会动态变化,无法总是通过固定 IP 访问。

前置工具准备

开始本例程前,请确认以下工具已安装:

前置知识

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

协议简介

本例程将 HTTP Server 和 NetBIOS 两个应用层协议结合使用。HTTP Server 基于 TCP 80 端口提供 Web 内容服务,NetBIOS 基于 UDP 137 端口提供局域网名称解析服务。两者并行运行在主循环中:NetBIOS 负责将设备名称解析为动态 IP 地址,HTTP Server 负责处理浏览器的 Web 请求。PC 端只需在浏览器中输入 NetBIOS 名称即可访问设备网页,无需关心 IP 地址变化。

两个协议的对比:

协议端口传输层功能
HTTP ServerTCP 80TCP(面向连接)提供 Web 页面内容服务
NetBIOSUDP 137UDP(无连接广播)局域网名称解析服务

结合优势

HTTP Server 单独使用时,需知道设备 IP 才能访问。DHCP 启用后 IP 动态变化,每次访问前需查看 IP。结合 NetBIOS 后,PC 端只需在浏览器输入 http://W55MH32/,系统自动完成名称到 IP 的解析,再发起 HTTP 请求,实现"名称即地址"的便捷访问体验。

硬件连接与拓扑

请注意:

PC 和开发板需接入同一路由器(同一网段)。NetBIOS 基于 UDP 广播,广播报文只在同一网段内传播。路由器需开启 DHCP 服务。

  1. Micro USB 线连接 DEBUG USB 口到 PC(供电 + 调试串口)
  2. 网线连接开发板 RJ45 网口 到路由器 LAN 口
┌─────────────────────────────────┐
│ 路由器 │
│ 192.168.1.1 │
└────┬──────────────────┬──────────┘
│ │
┌────┴──────┐ ┌────┴──────┐
│ PC │ │ W55MH32 │
│ Browser │ │HTTP+NBNS │
└───────────┘ └───────────┘
↑
DEBUG USB ──→ WIZ UartTool
网络拓扑:PC 浏览器输入 NetBIOS 名称,路由器转发广播解析 IP,再通过 HTTP 访问 W55MH32 网页

工程结构

工程位于 SDK 内 1.SDK\ModuleDemo\WZTOE\6.NetBIOS_HTTP\,核心文件如下:

6.NetBIOS_HTTP/
├── Project/
│   └── Project.uvprojx       ← Keil 工程文件
└── USER/
    ├── main.c                ← 硬件初始化 + 网络配置 + HTTP+NetBIOS 主循环
    ├── wiz_interface/
    │   ├── wiz_interface.c   ← PHY 检测 / 网络信息打印
    │   └── wiz_interface.h
    ├── httpServer/
    │   ├── httpServer.c      ← HTTP 服务器核心 (TCP 80)
    │   ├── httpServer.h
    │   ├── httpParser.c      ← HTTP 请求解析
    │   └── httpParser.h
    ├── netbios/
    │   ├── netbios.c         ← NetBIOS 名称服务 (UDP 137)
    │   └── netbios.h
    ├── dhcp/
    │   ├── dhcp.c            ← DHCP 客户端状态机 (DORA)
    │   └── dhcp.h
    ├── uart/
    │   ├── bsp_uart.c        ← 调试串口 + printf 重定向
    │   └── bsp_uart.h
    └── tim/
        └── bsp_tim.c/h       ← TIM3 1ms 定时器

本例程在 HTTP Server 基础上新增 NetBIOS 名称服务,主循环中并行运行 HTTP 服务器和 NetBIOS 解析器。

步骤1:HTTP 服务器初始化

文件:USER/main.c — 首先将网络信息(MAC、IP、子网掩码、网关、DNS)格式化为字符串并填充到网页模板中,然后注册网页内容并初始化 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);         // 注册HTTP服务器网页内容
httpServer_init(http_tx_ethernet_buf, http_rx_ethernet_buf, 1, socknumlist); // 初始化HTTP服务器

reg_httpServer_webContent() 将格式化后的网页内容注册到 HTTP 服务器,httpServer_init() 初始化 HTTP 服务器所需的 socket 和缓冲区。网页模板 index_page 中包含 MAC、IP 等占位符,由 sprintf 填充实际值。

网页内容注册

网页内容在设备启动时一次性注册。由于 DHCP 获取的 IP 地址会动态变化,网页中的 IP 信息需在初始化时通过 sprintf 填充。如果 IP 地址变化(如 DHCP 续租后更新),需重新注册网页内容。

步骤2:主循环并行执行 HTTP 和 NetBIOS

文件:USER/main.c — 在主循环中并行调用 httpServer_run() 和 do_netbios(),同时处理 HTTP 请求和 NetBIOS 名称查询。

while (1)
{
    httpServer_run(SOCK_HTTPS);   // 运行HTTP服务器
    do_netbios(SOCK_NETBIOS);     // 处理NetBIOS名称解析
}

当 PC 端使用 NetBIOS 名称访问时,首先发送广播请求,W55MH32 在 do_netbios() 中解析并比对名称,匹配后返回 IP 地址。PC 端将名称替换为 IP 发起 HTTP 请求,W55MH32 在 httpServer_run() 中处理请求并返回网页内容。两个函数在主循环中交替执行,实现并行处理。

并行机制说明

W55MH32 的 TOE 引擎支持多 socket 并行工作。HTTP Server 使用 SOCK_HTTPS(TCP socket),NetBIOS 使用 SOCK_NETBIOS(UDP socket),两者互不干扰。主循环中依次调用两个函数,每个函数处理各自 socket 的事件,从宏观上看是并行运行的。

运行验证

烧录例程运行后,首先进行 PHY 链路检测,然后通过 DHCP 获取网络地址并打印,接着程序开始持续接收和响应 NetBIOS 请求与 HTTP 请求。打开 WIZ UartTool V1.0,连接对应 COM 口(115200 / 8N1),预期串口输出如下:

W55MH32 HTTP Server example
PHY link
The current Mbtis speed : 100Mbps
The current Duplex Mode : Full-Duplex
====================================================================================================
 W55MH32 network configuration : static

 MAC         : 00:08:DC:00:0E:9A
 IP          : 192.168.1.33
 Subnet Mask : 255.255.255.0
 Gateway     : 192.168.1.1
 DNS         : 114.114.114.114
====================================================================================================

Please enter W55MH32/ in your browser to access the W55MH32 HTTP server
> HTTPSocket[0] : CLOSED
> HTTPSocket[0] : OPEN

请注意

测试实例需要 PC 端和 W55MH32 处于同一网段。在 PC 端打开浏览器,地址栏输入 http://W55MH32/ 即可通过 NetBIOS 名称访问设备网页。

串口显示 DHCP 成功获取 IP 后,当 PC 浏览器访问 http://W55MH32/ 时,W55MH32 先响应 NetBIOS 名称查询(name is W55MH32 → send response),PC 端获取 IP 后发起 HTTP 请求,浏览器显示设备网页信息。

W55MH32 串口输出 — PHY 链路 + DHCP 获取地址 
浏览器输入 http://W55MH32/ 访问设备网页 — 显示 MAC、IP、子网掩码、网关、DNS 等网络信息

常见问题

Q: 为什么需要将 HTTP 和 NetBIOS 结合

HTTP Server 单独使用时需知道设备 IP。启用 DHCP 后 IP 动态变化,每次访问前需查看 IP。结合 NetBIOS 后,PC 端只需通过 NetBIOS 名称即可访问设备网页,系统自动完成名称到 IP 的解析,实现即插即用的访问体验。

Q: PC 端如何通过 NetBIOS 名称访问 HTTP 服务器

PC 端浏览器输入 http://W55MH32/。浏览器先查询本地 NetBIOS 缓存,若无记录则发送 UDP 广播请求。W55MH32 收到请求后比对名称,匹配则回复 IP。PC 端建立映射后用该 IP 发起 HTTP 请求,W55MH32 返回网页内容。

Q: httpServer_run 和 do_netbios 是如何并行工作的

两者使用不同的 socket:httpServer_run 使用 TCP socket(SOCK_HTTPS),do_netbios 使用 UDP socket(SOCK_NETBIOS)。W55MH32 的 TOE 引擎支持多 socket 并行。主循环中依次调用两个函数,每个函数处理各自 socket 的事件,从宏观上看是并行运行的。

Q: 浏览器输入名称后无法访问网页怎么办

请检查:1) PC 和 W55MH32 是否在同一网段(NetBIOS 基于 UDP 广播,不跨网段);2) 串口是否显示 "name is W55MH32" 和 "send response"(确认 NetBIOS 解析成功);3) 浏览器是否输入了正确的名称格式 http://W55MH32/(注意末尾斜杠);4) 清除浏览器缓存后重试。

Q: 网页中显示的 IP 信息是否实时更新

网页内容在设备启动时通过 sprintf 一次性填充并注册。如果 DHCP 续租后 IP 地址发生变化,需重新调用 reg_httpServer_webContent 注册更新后的网页内容。本例程中网页显示的是启动时获取的 IP 信息。

总结

  • 方案定位:将 HTTP Server 与 NetBIOS 结合,解决 DHCP 动态 IP 导致的访问难题
  • 协议分工:NetBIOS(UDP 137)负责名称解析,HTTP Server(TCP 80)负责 Web 内容服务
  • 工作流程:PC 广播名称查询 → W55MH32 匹配名称回复 IP → PC 建立 IP 映射 → 浏览器发起 HTTP 请求
  • 实现要点:主循环并行调用 httpServer_run 和 do_netbios,两者使用不同 socket 互不干扰
  • 使用方法:PC 浏览器输入 http://W55MH32/ 即可访问设备网页,无需关心 IP 地址

下载本章例程

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

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

Andy

W5500 技术支持专家