请教下关于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

...全文
1038 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
@xiaoyu 2023-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来将文本数据解码为二进制数据。

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

公共马甲0315 2024-02-22
  • 举报
回复
@@xiaoyu 谢谢回复,您说的支持只是websocket协议支持,但不能表征js的WebSocket类支持。服务器端是我自己C++写的程序exe,这个肯定是根据需要可以调整的,我主要是疑惑,js这边的客户端貌似不支持,这个Websocket的底层代码看不到,也不好修改的。。。。目前测试结果看,就只能传ASCII码,您还有好的建议吗?我的服务器端没有使用TLS的,就是直接传输没有任何加密的,会和这个有关吗?
公共马甲0315 2024-02-28
  • 举报
回复
@@xiaoyu 感谢回复,确实是没有仔细看,这个RFC6455里面确实有写了的,没有仔细看就。。。。

87,997

社区成员

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

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