前言

很多做 STM32+W5500 以太网开发的新手都会混淆两个名词:

  1. 单片机硬件 Socket:W5500 芯片内置 8 路独立硬件通信通道,底层 TCP/UDP 传输载体;
  2. 网页 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.cw5500.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)

  1. 浏览器发起 TCP 连接 → W550 SOCK_HTTPS(80 端口硬件 Socket 建立连接);
  2. 浏览器发送 HTTP POST 请求,携带输入框文本;
  3. do_https()解析 HTTP 数据存入BCmdBuffer
  4. 单片机串口打印指令;
  5. 单次请求完成,TCP 硬件 Socket 直接关闭; 缺点:每次点击发送都要重新建立连接,无法实时推送设备状态到网页。

场景 2:WebSocket 实时通信(底层依旧依赖硬件 Socket)

  1. 浏览器 JS 创建 WebSocket 对象,向 80 端口发送升级握手 HTTP 包;
  2. W550 硬件 Socket 完成 TCP 连接,httputil.c识别升级请求并返回 101;
  3. 握手成功,这条 80 端口 TCP 通道永久保留;
  4. 网页随时下发指令、单片机主动推送传感器数据,不用反复建立连接; 优点:低延迟实时双向交互,工业网页控制面板首选。

场景 3:网络调试助手 TCP 23 端口(纯硬件 Socket,和 Web 无关)

打开网络调试助手,TCP 连接192.168.2.213:23,数据走 SOCK_TCPC 硬件 Socket,全程无 HTTP、无浏览器、和 WebSocket 没有任何关系。

四、核心从属关系(重点,别再混淆)

  1. WebSocket 不能脱离硬件 Socket 单独存在 WebSocket 只是跑在 TCP 硬件 Socket 之上的上层协议,没有 W550 提供的 TCP 底层通道,WebSocket 完全无法工作。 层级自上而下:浏览器 JS (WebSocket) → HTTP/TCP → W550 硬件 Socket → SPI → STM32 单片机。

  2. 硬件 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 握手请求,分别处理。

七、文末总结

  1. 单片机硬件 Socket 是网络的 “马路”,W550 硬件原生支持 TCP/UDP,是所有以太网通信的底层基础,独立于浏览器网页;
  2. WebSocket 是网页专用 “长连接专线”,运行在 TCP 硬件 Socket 之上,只为浏览器实时交互设计;
  3. 开发区分技巧:不和浏览器交互用原生 TCP/UDP Socket;简单网页提交用普通 HTTP;需要网页实时双向通信再拓展 WebSocket 功能。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐