【问题标题】:JS WebSocket client with C# WebSocket Server error 1006带有 C# WebSocket 服务器错误 1006 的 JS WebSocket 客户端
【发布时间】:2018-08-23 05:20:59
【问题描述】:

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

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

【问题讨论】:

  • 嗯,您可以尝试任何 mitm 代理来调试您的错误吗? (你可以使用提琴手)
  • 如果你搜索的话会有很多命中:socket error 1006。他就是一个很好的例子:support.pusher.com/hc/en-us/articles/…

标签: javascript c# websocket tcplistener


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多