一文分清:单片机硬件 Socket vs 网页 WebSocket(嵌入式 W5500 实战向)
前言
很多做 STM32+W5500 以太网开发的新手都会混淆两个名词:
- 单片机硬件 Socket:W5500 芯片内置 8 路独立硬件通信通道,底层 TCP/UDP 传输载体;
- 网页 WebSocket:浏览器 JS 专用上层长连接协议,跑在 TCP 之上。 二者层级、运行位置、使用场景完全不同,今天结合 BIT-MSE-8K-106Pro 工程实战讲清楚,看完再也不会搞混。
一、核心概念通俗解读
1. 单片机 W550 硬件 Socket(底层通信通道)
W5500 内置硬件 TCP/IP 协议栈,自带 8 个独立 Socket 通道(SOCK0~SOCK7),每个通道独立缓冲区、独立端口、独立 TCP 状态机,MCU 仅通过 SPI 读写寄存器控制收发,不用在单片机跑复杂网络协议栈。 在我们工程里分配:
- SOCK_HTTPS (4):80 端口,承载普通 HTTP 网页访问;
- SOCK_TCPC (1):23 端口,TCP 上位机调试;
- SOCK_UDPS (2):23 端口,UDP 设备搜索;
- SOCK_DHCP (3):68 端口,动态 IP 协商。
类比:城市里 8 条独立马路,所有网络数据(网页、TCP 指令、广播搜索)都必须走马路传输,马路本身不分用途,只负责搬运二进制字节。
2. 网页 WebSocket(浏览器上层通信协议)
WebSocket 是RFC6455 标准应用层协议,专门给浏览器设计,底层依然占用一条 W550 硬件 TCP Socket(通常 80 端口)。 建立流程:浏览器先发带Upgrade: websocket的 HTTP 握手请求,单片机校验返回101 Switching Protocols,握手成功后这条 TCP 连接永久保持,实现浏览器和单片机双向实时收发数据抖音百科。
类比:80 号马路上专门开辟的双向直达专线,专门给网页实时控制使用,需要先办握手手续才能长期通行。
二、全方位对比表格(结合 STM32 工程)
表格
| 对比维度 | W550 单片机硬件 Socket | 网页 WebSocket |
|---|---|---|
| 运行载体 | W550 以太网芯片硬件,由 STM32 通过 SPI 控制 | 电脑浏览器 JS 代码 |
| 协议层级 | 传输层载体,原生支持 TCP/UDP/ICMP | 应用层协议,底层依赖 TCP 硬件 Socket |
| 端口占用 | 每个 Socket 独立端口:80/23/68 等 | 固定复用 80 端口 HTTP 通道 |
| 连接特性 | TCP 可长 / 短连接;UDP 无连接;HTTP 默认短连接 | 强制持久全双工长连接,页面不关不断开 |
| 握手流程 | TCP 三次握手由 W550 硬件自动完成 | 必须先 HTTP 握手升级协议,多一步协商逻辑 |
| 数据格式 | 原始二进制字节,无额外封装 | 数据自带 WebSocket 帧头封装,不能裸传字节 |
| 代码位置 | socket.c、w5500.c底层驱动 |
login.h/webpage.h前端 JS 代码 |
| 项目现状 | 工程完整实现,TCP/UDP/HTTP 全部依赖它 | 当前工程仅普通 HTTP,未实现 WebSocket 解析 |
| 适用场景 | 1. 网络调试助手 TCP 收发2.UDP 局域网设备搜索3. 基础网页加载4.DHCP 自动获取 IP | 网页实时控制、传感器数据实时刷新、网页持续下发指令 |
| 开销 | 硬件卸载 TCP 运算,MCU 占用极低 | 需要单片机解析 WebSocket 帧,增加代码逻辑 |
三、结合你的工程实战流程演示
场景 1:普通网页提交指令(仅硬件 Socket,无 WebSocket)
- 浏览器发起 TCP 连接 → W550 SOCK_HTTPS(80 端口硬件 Socket 建立连接);
- 浏览器发送 HTTP POST 请求,携带输入框文本;
do_https()解析 HTTP 数据存入BCmdBuffer;- 单片机串口打印指令;
- 单次请求完成,TCP 硬件 Socket 直接关闭; 缺点:每次点击发送都要重新建立连接,无法实时推送设备状态到网页。
场景 2:WebSocket 实时通信(底层依旧依赖硬件 Socket)
- 浏览器 JS 创建 WebSocket 对象,向 80 端口发送升级握手 HTTP 包;
- W550 硬件 Socket 完成 TCP 连接,
httputil.c识别升级请求并返回 101; - 握手成功,这条 80 端口 TCP 通道永久保留;
- 网页随时下发指令、单片机主动推送传感器数据,不用反复建立连接; 优点:低延迟实时双向交互,工业网页控制面板首选。
场景 3:网络调试助手 TCP 23 端口(纯硬件 Socket,和 Web 无关)
打开网络调试助手,TCP 连接192.168.2.213:23,数据走 SOCK_TCPC 硬件 Socket,全程无 HTTP、无浏览器、和 WebSocket 没有任何关系。
四、核心从属关系(重点,别再混淆)
-
WebSocket 不能脱离硬件 Socket 单独存在 WebSocket 只是跑在 TCP 硬件 Socket 之上的上层协议,没有 W550 提供的 TCP 底层通道,WebSocket 完全无法工作。 层级自上而下:浏览器 JS (WebSocket) → HTTP/TCP → W550 硬件 Socket → SPI → STM32 单片机。
-
硬件 Socket 完全不需要 Web/WebSocket 也能工作 TCP 调试、UDP 广播、DHCP 动态 IP 这些功能,不需要浏览器、不需要网页、和 WebSocket 零关联,是独立底层通信能力。
五、工程开发选型建议
选 W550 原生 TCP Socket(23 端口)
- 上位机软件、网络调试助手长期收发指令;
- 不需要浏览器,追求极简代码、极低 CPU 占用;
- 大批量设备上位统一控制。
选普通 HTTP 网页(现有代码,无需改驱动)
- 简单页面下发单次指令,不需要实时刷新;
- 开发成本低,现有
parseWeb_StrToBCMD解析函数直接使用; - 仅偶尔打开浏览器配置设备。
升级 WebSocket(需要拓展 httputil.c)
- 网页实时显示温度、电机状态;
- 网页按钮无延迟持续控制设备;
- 不想频繁刷新页面、追求流畅交互。
六、常见踩坑答疑
Q1:浏览器访问网页提示拒绝连接是什么原因?
不是 Socket/WebSocket 问题,是do_https()函数被注释,80 端口硬件 Socket 没有开启监听,TCP 连接直接被丢弃。
Q2:开启 DHCP 动态 IP 后,会影响 Socket 吗?
不会。静态 / 动态 IP 只是配置 W550 寄存器的 IP 地址,8 路硬件 Socket 通道逻辑完全不变。
Q3:UDP Socket 可以跑 WebSocket 吗?
不行。WebSocket 强制基于 TCP 协议,UDP 无连接特性不支持 HTTP 握手升级。
Q4:同一个 80 端口硬件 Socket,能否同时支持 HTTP 和 WebSocket?
可以。单片机收到请求先判断头部是否带Upgrade: websocket,区分普通网页请求和 WebSocket 握手请求,分别处理。
七、文末总结
- 单片机硬件 Socket 是网络的 “马路”,W550 硬件原生支持 TCP/UDP,是所有以太网通信的底层基础,独立于浏览器网页;
- WebSocket 是网页专用 “长连接专线”,运行在 TCP 硬件 Socket 之上,只为浏览器实时交互设计;
- 开发区分技巧:不和浏览器交互用原生 TCP/UDP Socket;简单网页提交用普通 HTTP;需要网页实时双向通信再拓展 WebSocket 功能。
更多推荐




所有评论(0)