请教下关于websocket解析字符串通讯

公共马甲0315 2023-11-06 16:36:55

如果是十六进制的数据片段,比如0x09 00 00 00 05 02 01 00类似的,我在传输时为了确保客户端websocket可以解析,就必须转化成ASCII码字符串吗?

请问可以直接传输吗?

我在客户端js里面写了:

ws = new WebSocket('ws://127.0.0.1:20000');

ws.binaryType = 'arraybuffer';

...

但这样还是不行,会客户端提示错误:websocket connection to xxx failed: could not decode a text frame as utf-8

...全文
505 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Y2002168 11-07
  • 打赏
  • 举报
回复

WebSocket协议支持传输二进制数据,你不需要将二进制数据转化成ASCII码字符串。在你的客户端JavaScript中,你已经设置了ws.binaryType = 'arraybuffer',这表明你希望WebSocket接收和处理二进制数据。

然而,你遇到的错误消息"could not decode a text frame as utf-8"表明WebSocket服务器可能在发送数据时使用了文本帧(text frame),而不是二进制帧(binary frame)。WebSocket有两种数据帧类型,分别是文本帧和二进制帧。你需要确保服务器在发送数据时使用二进制帧,以使客户端可以正确解析二进制数据。

在服务器端,确保你发送的数据以二进制帧的形式进行发送,具体如何实现取决于你使用的编程语言和WebSocket库。通常,在服务器端设置消息类型为二进制,然后发送二进制数据即可。

如果你无法修改服务器端的实现,但需要接收二进制数据,那么你可以尝试接收文本数据,然后在客户端将其转化为二进制数据。这个过程称为数据解析,需要根据数据格式和协议进行相应的解析。在JavaScript中,你可以使用TextDecoder来将文本数据解码为二进制数据。

如果你控制服务器端,最好的方法是确保服务器以二进制帧的形式发送二进制数据,这样客户端不需要进行额外的解析。

87,838

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧