带有 C# WebSocket 服务器错误 1006 的 JS WebSocket 客户端

JS WebSocket client with C# WebSocket Server error 1006

我正在尝试将一些数据从用 C# 编写的服务器发送到用 JS 编写的浏览器客户端。当我发送 12900 字节大小的消息时,一切正常。如果我将发送大小为 67990 字节的消息,那么在服务器端我将不会收到任何错误,而在客户端我将收到断开连接错误 1006,没有其他解释。我在某处找不到与消息大小相关的任何限制。这是我尝试发送数据的 C# 代码。

byte[] data =getDecodedMessage(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(dataResponse)));
stream.Write(data, 0, data.Length);

基于question user3892585 answer,我在 WebSocket 数据传输的编码函数中用 bytesRaw.LongLength 替换了 bytesRaw.Length。这样做后我没有收到套接字错误。

public static byte[] getEncodedMessage(byte[] bytesRaw)
    {
        List<byte> bytesFormatted = new List<byte>();
        bytesFormatted.Add(129);

        int indexStartRawData = -1; // it doesn't matter what value is
                                    // set here - it will be set now:

        if (bytesRaw.LongLength <= 125)
        {
            bytesFormatted.Add(Convert.ToByte(bytesRaw.LongLength));


            indexStartRawData = 2;
        }

        else if (bytesRaw.LongLength >= 126 && bytesRaw.LongLength <= 65535)
        {
            bytesFormatted.Add(126);
            bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 8) & 255));
            bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength) & 255));

            indexStartRawData = 4;
        }

        else
        {
            bytesFormatted.Add(127);
            bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 56) & 255));
            bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 48) & 255));


            bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 40) & 255));
            bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 32) & 255));
            bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 24) & 255));
            bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 16) & 255));
            bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength >> 8) & 255));
            bytesFormatted.Add(Convert.ToByte((bytesRaw.LongLength) & 255));

            indexStartRawData = 10;
        }
        // put raw data at the correct index
        bytesFormatted.InsertRange(indexStartRawData, bytesRaw);
        return bytesFormatted.ToArray();
    }