洱海之月 2024-04-09 10:04 采纳率: 0%
浏览 17

WebSocket服务端发送二进制报文数据客户端接收异常


        /// <summary>
        /// 发送二进制数据到客户端
        /// </summary>
        /// <param name="binary">数据</param>
        public void Send(byte[] binary)
        {
            Frame frame = new Frame() { Fin = true, PayloadLength = binary.Length };
            using Stream output = frame.OpenWrite(_baseStream);
            output.Write(binary, 0, binary.Length);
        }

这段代码在目录"http-main\src\WebSocket\Messager.cs" 110行~115行,我采用这段代码向WebSocket发送二进制格式数据,发送失败,客户端提示异常

09:48:14,035 WebSocket error: 数组维度超过了支持的范围。 [UIBrowser.Common.PdtWebSocketComm] 
System.OverflowException: 数组维度超过了支持的范围。
   在 HTC4.Common.Extensions.MemoryStreamExtensions.ReadBytes(MemoryStream ms, Int32 len)
   在 HTC4.Common.Extensions.MemoryStreamExtensions.ReadASCIIs(MemoryStream ms, Int32 len)

我认为是报文数据拼接错误导致的异常情况

  • 写回答

4条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-04-09 10:08
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这段代码是用于向WebSocket发送二进制数据的。参数为一个byte数组binary,首先创建一个Frame对象,设置Fin为true,设置PayloadLength为binary数组的长度。然后使用using关键字创建一个输出流对象output,且此流对象是基于_baseStream。最后调用output的Write方法将二进制数据写入流中发送出去。 发送失败的原因是客户端提示“数组维度超过了支持的范围”。从异常信息来看,是在将MemoryStream中的数据读取到byte数组中时出现异常。可以推断出,在客户端接收到数据时,解析出现问题,无法正常读取到数据。这种情况很可能是发送的二进制数据格式不符合WebSocket协议规范,导致客户端解析失败。 代码上来看,这段代码只是将二进制数据写入了输出流中,并没有对数据进行任何处理,因此很可能是在调用此方法前的数据拼接处理出现问题。建议先对二进制数据进行合法性校验和拼接处理,再调用此方法进行发送。同时,建议多关注客户端的异常提示,根据不同的异常类型进行不同的处理。
    评论

报告相同问题?

问题事件

  • 创建了问题 4月9日

悬赏问题

  • ¥15 铜与钢双金属板叠加在一起每种材料300mm长,18mm宽,4mm厚一端固定并加热至80℃,当加热端温度保持不变时另一端的稳态温度。ansys
  • ¥15 django5安装失败
  • ¥60 ios系统storm sniffer 写入http规则加密如何破解?
  • ¥15 Java与Hbase相关问题
  • ¥15 后缀 crn 游戏文件提取资源
  • ¥15 ANSYS分析简单钎焊问题
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上