【发布时间】:2021-01-07 23:14:51
【问题描述】:
我正在开展一个项目,我将通过 websocket 连接将二进制数据发送到 LED 矩阵。我想以字节数组的形式发送二进制数据,例如在矩阵上从右到左绘制一条对角线如下所示:
0b00000001
0b00000010
0b00000100
0b00001000
0b00010000
0b00100000
0b01000000
0b10000000
当我尝试这样做时遇到的问题是,当我尝试发送此数据时,无论我使用什么 websocket 客户端测试器,数字都会被编码为字符串。
也就是说,当我尝试发送二进制数1,而不是发送0x01,套接字客户端发送一个十进制的49/十六进制的0x31,这是字符串的字符代码'1' 在 ascii 或 unicode 中。
起初我认为这个问题是在驱动矩阵的代码中的 arduino 方面,但后来我通过 websocket 服务器将其追溯到测试客户端。如果我弹出wireshark并查看从客户端到服务器的传输数据,编码发生在客户端,即websocket传输的第一部分。
我认为这可能是我只是使用了 Firecamp 错误,但是当使用不同的客户端时也会发生同样的事情,在这种情况下 websocat:
所以,我的问题是:通过 websockets 发送二进制数的正确方法是什么?我是否只是误解了二进制功能应该如何工作,就像期望我将我的数字作为字符串发送并将它们转换回另一端的数字一样?
【问题讨论】:
-
可以以二进制格式发送数字。如果没有看到您编写 WebSocket 消息的实际代码,我无法回答任何问题(请不要发布代码截图,它们无法阅读)......您可能正在将数字转换为服务器上的字符串,或者您可能会在客户端以字符串格式发送数字 - 如果不观察代码,我怎么知道?
-
P.S.,我不知道您的 WebSocket 客户端(我使用浏览器的控制台),但在我看来,您可能正在发送从键盘输入的字符串(而不是作为二进制字符串发送而不是 UTF-8 字符串)。尝试使用实际的二进制数据管道传输文件。
-
@Myst 在我编写 websocket 客户端代码的地方没有代码。我直接从上面的客户端测试人员那里发送消息。我使用 firecamp(上面的 GUI)和 websocat(上面的 cli 工具)。我在研究时想出了答案。我现在正在输入答案。
-
啊,阅读您的第二条评论,我们得出了相同的解决方案(即管道二进制文件与在控制台中输入二进制文件)
标签: javascript websocket iot