【问题标题】:How to send messages as websocket client in c++ to a server?如何在 C++ 中将消息作为 websocket 客户端发送到服务器?
【发布时间】:2014-10-02 18:52:18
【问题描述】:

我在向服务器发送消息时遇到了一点问题。 它可能会发送它们并且服务器接收它们,但我不知道如何正确屏蔽它们。 我知道这实际上是这样的: https://www.rfc-editor.org/rfc/rfc6455#section-5.2 但我不是很了解它。 如果有人可以共享整个伪代码,从普通消息到写入缓冲区,实际上需要做什么,那就太好了。 我也在这里搜索了很多信息,但主要是他们建议库或直接链接。问题是库很好,但实际上我已经完成了我需要的一切。仅缺少发送掩码。

问候

【问题讨论】:

    标签: c++ websocket client send


    【解决方案1】:

    你能在屏蔽位关闭的情况下发送消息吗?

    当设置掩码位时,服务器期望出现 4 个字节的掩码,并且有效负载与

    for ( size_t i=0; i<packet_len; i++ ) {
        packet[i] = payload[i] ^ mask_bits[i&3];
    }
    

    编辑:添加更多细节。

    我假设你已经完成了升级握手,发送到网络进行通信的实际字节是:

    [flag][mask_bit, len][extended length][mask][payload]
    

    地点:

    • flag:一个字节,看手册,注意我没试过fragment。
    • 掩码位,第二个字节最高位一位。
    • len:第二个字节的 7 位。如果 len 为 126,则真正的 len 是 16 位扩展长度字段。如果为 127,则扩展长度为 64 位。
    • 掩码:仅在设置掩码位时出现,它是用于对有效负载进行异或的 4 个字节。
    • 有效负载:要发送的实际字节数

    例如,要以二进制模式向服务器发送“Hello”,您可以:

    • 标志:0x82,“帧中的最终数据包”和“二进制模式”
    • 掩码位:1
    • 长度:6
    • 掩码:0x11、0x22、0x33、0x44
    • 有效负载:“你好”、0x48、0x65、0x6C、0x6C、0x6F、0x00

    被屏蔽的payload为:0x48^0x11, 0x65^0x22, 0x6C^0x33, 0x6C^0x44, 0x6F^0x11, 0x00^0x22 => 0x59、0x47、0x5F、0x28、0x7E、0x22

    整个流是:0x82、0x86、0x11、0x22、0x33、0x44、0x59、0x47、0x5F、0x28、0x7E、0x22

    【讨论】:

    • 我可能无法在屏蔽位关闭的情况下发送消息。我也有关注你的问题:-) 我可能是 C++ 的新手。如果你能给我更多关于你在那里使用的变量的解释,那就太好了。也许我的服务器有更多细节,因为我目前使用的 websocket PHP Class
    • 一件好事,如果消息无效,服务器不会再踢我了,但它仍然无法以某种方式为我工作......string convert(string message) { char msg[1024]; char mask[4]; mask[0] = '0x11'; mask[1] = '0x22'; mask[2] = '0x33'; mask[3] = '0x44'; int len = message.size(), y=0; msg[0] = '0x82'; msg[1] = mask[0]; msg[2] = mask[1]; msg[3] = mask[2]; msg[4] = mask[3]; string hex = strToHex(message); for(int i=0; i&lt;len; i++) { msg[i+5] = hex[i] ^ mask[i&amp;3]; } return msg+hex; } 你看到有什么问题吗? strToHex 工作正常。
    • 十六进制数不需要报价
    • 嗯它没有解决问题。正如我所说,我是 C++ 的初学者 :-) 但是我犯了一个小错误,它不是 return msg+hex; 它唯一的 return msg; 但也不是问题:-(
    猜你喜欢
    • 2017-09-15
    • 2022-07-15
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    相关资源
    最近更新 更多