从websocket接收数据

时间:2015-01-30 07:15:59

标签: javascript c# websocket

我正在为我的大学在C#和JS中实现一个websocket服务器,而我在设置它时遇到了麻烦。 我可以连接,握手和所有正确和测试。但在那之后,我无法读取来自浏览器的消息,直到我在stackoverflow上找到此函数(我丢失了链接,抱歉):

private static string byteToString(byte[] data){
    byte firstByte = data[0];
    byte secondByte = data[1];
    int opcode = firstByte & 0x0F;
    bool isMasked = ((firstByte & 128) == 128);
    int payloadLength = secondByte & 0x7F;

    if (!isMasked)
        return null;

    if (opcode != 1)
        return null;

    List<int> mask = new List<int>();
    for (int i = 2; i < 6; i++)
    {
        mask.Add(data[i]);
    }
    int payloadOffset = 6;
    int dataLength = payloadLength + payloadOffset;

    List<int> unmaskedPayload = new List<int>();
    for (int i = payloadOffset; i < dataLength; i++)
    {
        int j = i - payloadOffset;
        unmaskedPayload.Add(data[i] ^ mask[j % 4]);
    }

    byte[] data2=unmaskedPayload.Select(e => (byte)e).ToArray();
    System.Text.ASCIIEncoding decoder = new System.Text.ASCIIEncoding();
    string result = decoder.GetString(data2, 0, data2.Length);

    return result;
}

它应该从缓冲区获取data [],并且神奇地变成一个可读的字符串,它就像一个魅力,但如果我在浏览器中通过send()输入一个大字符串,那么该函数就不会干活了。 不幸的是,我不知道这个函数是如何找到问题的,你们有没有这种行为的线索? 我很乐意提供任何代码。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用C#第三方dll,如

Alchemy dll

Superwebsocket dll

通过使用此dll,我们可以同时连接100多个连接,并且我们可以像实时数据馈送一样单独与所有客户端通信。这也处理它内部的线程....