全部例程

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

W6300

更新于 2026年10月14日

本篇总结

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

🔑 MH2457 + QSPI、UART 调试、硬件 TOE 引擎、NetBIOS、HTTP、DHCP

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

采购推荐:点击前往 WIZnet 官方淘宝店铺 选购 W6300-EVB-M4 开发板

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

前置工具准备

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

前置知识

该例程用到的其他网络协议,包括 DHCP、HTTP Server、NetBIOS。有关 W6300 的初始化过程,请参考 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://WIZNET/,系统自动完成名称到 IP 的解析,再发起 HTTP 请求,实现"名称即地址"的便捷访问体验。

硬件连接与拓扑

请注意:

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

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

工程结构

工程核心文件如下:

NetBIOS_HTTP/
├── main.c                    ← 系统入口:串口、GPIO、QSPI 初始化 + user_run()
├── Internet/                 ← 协议库(与 USER 同级)
│   ├── httpServer.c/h        ← HTTP 服务器核心 (TCP 80)
│   ├── httpParser.c/h        ← HTTP 请求解析
│   ├── netbios.c/h           ← NetBIOS 名称服务 (UDP 137)
│   └── httpUtil.c/h          ← HTTP CGI 处理工具
└── USER/
    ├── user_main.c           ← 网络地址定义 + HTTP+NetBIOS 主循环
    ├── wiz_platform.c/h      ← 平台适配:debug_usart_init、wizchip_gpio_init、hspi_init
    └── wiz_interface.c/h     ← W6300 驱动接口:wizchip_initialize、network_init、PHY 检测、软件定时器

步骤1:HTTP 服务器初始化

文件:USER/user_main.c — 首先初始化网络,然后将网页内容注册到 HTTP 服务器,最后初始化 HTTP 服务器。

wizchip_initialize();
network_init(ethernet_buf, &default_net_info);

reg_httpServer_webContent((uint8_t *)"index.html", (uint8_t *)index_page);
httpServer_init(http_tx_ethernet_buf,
                http_rx_ethernet_buf,
                _WIZCHIP_SOCK_NUM_ - 1,
                socknumlist);

/* W6300 HTTP backend uses this 1 s tick for its TX-buffer timeout path. */
wiz_add_timer(httpServer_time_handler, 1000);

printf("Please enter /WIZNET in your browser to access the HTTP server\r\n");

reg_httpServer_webContent() 将网页内容注册到 HTTP 服务器,httpServer_init() 初始化 HTTP 服务器所需的 socket 和缓冲区。wiz_add_timer(httpServer_time_handler, 1000) 注册 1 秒软件定时器,用于 HTTP 服务器 TX 缓冲超时判断。

网页内容注册

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

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

文件:USER/user_main.c — 在主循环中遍历 HTTP 服务器 socket 调用 httpServer_run(),并调用 do_netbios(),同时处理 HTTP 请求和 NetBIOS 名称查询。

while (1)
{
    for (i = 0; i < _WIZCHIP_SOCK_NUM_ - 1; i++)
    {
        httpServer_run((uint8_t)i);
    }

    do_netbios(SOCK_NETBIOS);
}

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

并行机制说明

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

运行验证

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

MH2457 W6300 QSPI example start
W6300 HTTP Server and NetBIOS example
PHY link
The current Mbtis speed : 100Mbps
The current Duplex Mode : Full-Duplex
DHCP running
DHCP success!
====================================================================================================
 W6300 network configuration : DHCP

 MAC         : 00:08:DC:12:34:56
 IP          : 192.168.2.24
 Subnet Mask : 255.255.255.0
 Gateway     : 192.168.2.1
 DNS         : 192.168.2.1
====================================================================================================

Please enter /WIZNET in your browser to access the HTTP server
rem_ip_addr=192.168.2.20:137
netbios name query question
name is WIZNET
send response

请注意

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

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

WIZ UartTool 显示 — PHY 链路 + DHCP 获取地址
浏览器输入 http://WIZNET/ 访问设备网页结果

常见问题

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

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

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

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

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

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

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

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

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

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

总结

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

下载本章例程

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

开发环境: Keil MDK5

Andy

W5500 技术支持专家