簡體   English   中英

具有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);

基於問題user3892585回答我換成bytesRaw.LengthbytesRaw.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();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM