客户端向 websocket 服务器发送消息时的编码类型是啥?

Posted

技术标签:

【中文标题】客户端向 websocket 服务器发送消息时的编码类型是啥?【英文标题】:what is an encoding type when client sends message to websocket server?客户端向 websocket 服务器发送消息时的编码类型是什么? 【发布时间】:2012-03-18 14:41:33 【问题描述】:

有人知道客户端发送到 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】:

消息以 utf-8 格式传输。详情请参阅规范的section 5.6。

这取决于您在服务器中使用什么编码。 UTF-8 在 C 中很容易处理(它仍然由单个 nul 字符终止,因此所有字符串函数都可以工作),因此您可能会发现在代码中使用 UTF-8 而不转换为 ascii/unicode 是最容易的。

【讨论】:

我使用的是 Ubuntu linux,据我所知这是 utf-8 系统。你的意思是我不需要任何转换来查看服务器端的数据? p.s:我有点声望可以养箭! ^^ 谢谢你今天这么多好意的回答!!

以上是关于客户端向 websocket 服务器发送消息时的编码类型是啥?的主要内容,如果未能解决你的问题,请参考以下文章

npm 'websocket' 服务器向客户端发送消息

如何使用 STOMP 从 Spring WebSocket 服务器向 WebSocket 客户端发送消息?

Spring:向 websocket 客户端发送消息

SpringBoot+Vue+Websocket 实现服务器端向客户端主动发送消息

Python websocket 客户端 - 从 python 代码向 WebSocketServer 发送消息

无法从 React 客户端向 Node.js websocket 服务器发送消息