C#WebSocket解码

C#WebSocket解码,c#,websocket,decoding,C#,Websocket,Decoding,我正在尝试用C#制作一个WebSocketServer。一般来说,它工作得很好,但我想我在解码过程中遇到了一个问题 这是我的解码功能: public static byte[] EncodeMessageToSend(string message) { byte[] response; byte[] bytesRaw = Encoding.UTF8.GetBytes(message); byte[] frame = new byte[10]

我正在尝试用C#制作一个WebSocketServer。一般来说,它工作得很好,但我想我在解码过程中遇到了一个问题

这是我的解码功能:

public static byte[] EncodeMessageToSend(string message)
    {
        byte[] response;
        byte[] bytesRaw = Encoding.UTF8.GetBytes(message);
        byte[] frame = new byte[10];

        Int32 indexStartRawData = -1;
        Int32 length = bytesRaw.Length;

        frame[0] = (byte)129;
        if (length <= 125)
        {
            frame[1] = (byte)length;
            indexStartRawData = 2;
        }
        else if (length >= 126 && length <= 65535)
        {
            frame[1] = (byte)126;
            frame[2] = (byte)((length >> 8) & 255);
            frame[3] = (byte)(length & 255);
            indexStartRawData = 4;
        }
        else
        {
            frame[1] = (byte)127;
            frame[2] = (byte)((length >> 56) & 255);
            frame[3] = (byte)((length >> 48) & 255);
            frame[4] = (byte)((length >> 40) & 255);
            frame[5] = (byte)((length >> 32) & 255);
            frame[6] = (byte)((length >> 24) & 255);
            frame[7] = (byte)((length >> 16) & 255);
            frame[8] = (byte)((length >> 8) & 255);
            frame[9] = (byte)(length & 255);

            indexStartRawData = 10;
        }

        response = new byte[indexStartRawData + length];

        Int32 i, reponseIdx = 0;

        //Add the frame bytes to the reponse
        for (i = 0; i < indexStartRawData; i++)
        {
            response[reponseIdx] = frame[i];
            reponseIdx++;
        }

        //Add the data bytes to the response
        for (i = 0; i < length; i++)
        {
            response[reponseIdx] = bytesRaw[i];
            reponseIdx++;
        }

        return response;
    }
公共静态字节[]EncodeMessageToSend(字符串消息)
{
字节[]响应;
byte[]bytesRaw=Encoding.UTF8.GetBytes(消息);
字节[]帧=新字节[10];
Int32 indexStartRawData=-1;
Int32长度=字节原始长度;
帧[0]=(字节)129;
如果(长度=126&&length>8)&255);
帧[3]=(字节)(长度为255);
indexStartRawData=4;
}
其他的
{
帧[1]=(字节)127;
帧[2]=(字节)((长度>>56)和255);
帧[3]=(字节)((长度>>48)和255);
帧[4]=(字节)((长度>>40)和255);
帧[5]=(字节)((长度>>32)和255);
帧[6]=(字节)((长度>>24)和255);
帧[7]=(字节)((长度>>16)和255);
帧[8]=(字节)((长度>>8)和255);
帧[9]=(字节)(长度为255);
indexStartRawData=10;
}
响应=新字节[indexStartRawData+长度];
Int32 i,reponseIdx=0;
//将帧字节添加到响应中
对于(i=0;i
我是从这里得到的

有时它能正确解码,但随后它开始做奇怪的事情。它附加了一些问号或未定义的字符。我还尝试了一些其他的解码功能,但效果不太好

我希望有人能帮我

问候 马塞尔