Что такое тип кодировки, когда клиент отправляет сообщение на сервер websocket? - PullRequest
3 голосов
/ 18 марта 2012

кто-нибудь знает, что такое тип кодировки сообщения, которое клиент отправляет на сервер websocket?

Я изучаю этот сайт

http://blogs.claritycon.com/blog/2012/01/18/websockets-with-rfc-6455/

и с какого сайтаучит меня, ниже приведен код декодирования для получения сообщения от клиента на стороне сервера !!!

public string HybiDecode(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; } // not masked
    if (opcode != 1) { return null; } // not text

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

    return ToAscii(unmaskedPayload.Select(e => (byte)e).ToArray());
}

public string ToAscii(byte[] data)
{
    System.Text.ASCIIEncoding decoder = new System.Text.ASCIIEncoding();
    return decoder.GetString(data, 0, data.Length);
}

, но сейчас я учусь на языке C, поэтому мне нужно преобразовать ToAscii () в язык C!но ... от чего?от Unicode до ASCII или от UTF-8 до ASCII ???не могли бы вы дать мне знать, если вы знаете об этом ???

1 Ответ

4 голосов
/ 18 марта 2012

Сообщения передаются как utf-8. Подробнее см. раздел 5.6 спецификации.

Вам решать, какую кодировку вы используете на своем сервере. UTF-8 легко обрабатывается в C (он по-прежнему завершается одним нулевым символом, поэтому все строковые функции работают), поэтому вам может быть проще использовать UTF-8 в вашем коде и не преобразовывать его в ascii / unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...