如何将消息作为websocket客户端在c ++中发送到服务器?

时间:2014-08-09 11:14:07

标签: c++ websocket client send

我在发送邮件到服务器时遇到了一些问题。 它可能发送它们,服务器接收它们,但我不知道如何正确掩盖它们。 我知道这实际上是这样的: http://tools.ietf.org/html/rfc6455#section-5.2 但我不是很了解它。 如果有人可以共享一个完整的伪代码,那么从普通消息到写入缓冲区之前需要完成的事情会很好。 我也在这里搜索了很多信息,但主要是他们建议libs或直接链接。问题是libs很好,但实际上我已经完成了我所需要的一切。只缺少发送掩码。

此致

1 个答案:

答案 0 :(得分:0)

你可以发送掩码位关闭的消息吗?

当设置了掩码位时,服务器需要4字节掩码才能显示,并且有效负载是XOR' d

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:一个字节,阅读手册,注意我还没试过片段。
  • 掩码位,位于第二个字节的最高位的一位。
  • len:第二个字节的7位。如果len是126,则实数len是扩展长度的16位字段。如果是127,则扩展长度为64位。
  • mask:仅在设置了掩码位时才出现,它使用4个字节来对有效载荷进行异或。
  • payload:要发送的实际字节数

例如,发送&#34; Hello&#34;以二进制模式服务器,你可以:

  • flag:0x82,&#34;帧中的最终数据包&#34;和&#34;二进制模式&#34;
  • 掩码位:1
  • len:6
  • 掩码:0x11,0x22,0x33,0x44
  • 有效载荷:&#34; Hello&#34;,0x48,0x65,0x6C,0x6C,0x6F,0x00

屏蔽的有效负载为:0x48 ^ 0x11,0x65 ^ 0x22,0x6C ^ 0x33,0x6C ^ 0x44,0x6F ^ 0x11,0x00 ^ 0x22 =&GT; 0x59,0x47,0x5F,0x28,0x7E,0x22

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