You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeMCU使用SocketIoClient连接Node.js Socket.IO服务编译报错求助

问题原因

这个编译错误核心是SocketIoClient库与依赖的WebSockets库版本不兼容:
当前你使用的新版WebSockets库中,beginSSL方法的第4个指纹参数要求是const uint8_t*类型,但SocketIoClient库源码调用该方法时传入的是const char*类型,没有做类型转换,因此触发类型不匹配报错。

解决方案

方案1:修改SocketIoClient库源码(最快捷)

找到报错提示的SocketIoClient库源码文件:C:\Users\OneDrive\Documents\Arduino\libraries\SocketIoClient\SocketIoClient.cpp,打开后定位到第47行代码:

_webSocket.beginSSL(host, port, url, fingerprint);

对fingerprint参数添加强制类型转换,修改为:

_webSocket.beginSSL(host, port, url, (const uint8_t *)fingerprint);

保存文件后重新编译即可解决类型错误。

方案2:降级WebSockets库版本

如果不想修改第三方库源码,可以将WebSockets库降级到适配版本:

  • 打开Arduino IDE的库管理器
  • 搜索WebSockets,将版本降级到2.3.0及以下版本,该版本的beginSSL方法仍支持const char*类型的指纹参数,降级完成后重新编译即可。

方案3:使用非SSL连接(仅本地测试适用)

如果你的Node.js服务是本地部署不需要HTTPS加密,直接使用HTTP协议连接即可,修改webSocket.begin的调用参数,指定服务的IP和HTTP端口:

// 示例,替换为你自己的Node.js服务IP、端口,注意EIO版本匹配Socket.IO服务端版本
webSocket.begin("192.168.1.100", 3000, "/socket.io/?EIO=4");

注意:Socket.IO v3/v4对应EIO版本为4,v2对应EIO版本为3,需要和你Node.js端的Socket.IO版本匹配。

内容的提问来源于stack exchange,提问作者Ishan Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:27:04