带有C#WebSocket Server错误1006的JS WebSocket客户端

时间:2018-03-14 15:32:42

标签: javascript c# websocket tcplistener

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

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

1 个答案:

答案 0 :(得分:0)

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

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();
    }