1.客户端

        1.在建立TCP连接后,客户端需要发送握手升级通信,客户端发送

   GET / HTTP/1.1
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

再服务端回复后

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
 

判断 Sec-WebSocket-Accept是否正确 就可以确认链接

    1.单片机 先生成一个16字节的随机码,通过base64编码生成24字节的  Sec-WebSocket-Key

    2.发送到服务端,服务端会回复Sec-WebSocket-Accept

    3.验证 单片机对Sec-WebSocket-Key拼接固定字符258EAFA5-E914-47DA-95CA-C5AB0DC85B11,SHA1哈希值计算 然后BASE64编码得到28字节的KEY,与服务器发来的Sec-WebSocket-Accept对比 相同即是认为连接。

2服务端

        1.接收客户端发来的握手协议,剥离出Sec-WebSocket-Key,拼接固定字符258EAFA5-E914-47DA-95CA-C5AB0DC85B11,SHA1哈希值计算,BASE64编码得到28字节的key 

         2.拼接成

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

回复给客户端

3帧格式

发送和接收都要按照帧格式,客户端发送需要添加掩码,服务器回复不需要掩码,发送字节数在125上下时是有区别的,websocket如果使用JSON格式,还需添加。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐