如何在c++中作为websocket客户端发送消息到服务器
How to send messages as websocket client in c++ to a server?
我在向服务器发送消息时遇到了一点问题。它可能发送它们和服务器接收它们,但我不知道如何正确地屏蔽它们。我知道这实际上是:https://www.rfc-editor.org/rfc/rfc6455#section-5.2但我不太明白。如果有人能分享从普通消息到写入缓冲区实际需要完成的整个伪代码,那就太好了。我也在这里搜索了很多信息,但他们大多是建议库或直接链接。问题是lib很好,但实际上我已经做了所有我需要的。只有发送掩码丢失。
对
可以发送掩码位被去掉的消息吗?
当设置掩码位时,服务器期望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]
地点:
- 标志:一个字节,读取手册,注意我没有尝试过片段。
- 掩码位,位于第二字节最高位的一位。
- len: 7位第二字节。当len为126时,实len为16位扩展长度字段。如果是127,扩展长度为64位。
- 掩码:仅当掩码位设置时出现,它是4字节用于异或负载。
- payload:要发送的实际字节数
例如,要以二进制模式向服务器发送"Hello",您可以这样做:
- 标志:0x82,"帧中最后一个数据包"answers"二进制模式"
- 掩码位:1 len:
- 6
- 掩码:0x11, 0x22, 0x33, 0x44
- 有效载荷:"Hello",0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x00
掩码有效载荷为: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
相关文章:
- 从服务器传输到客户端的消息不会出现
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- Kafka C++客户端需要很长时间才能收到消息
- nng to pynng pub/sub. 客户端未收到任何消息
- C++ UDP 服务器在获取客户端地址配置时发送消息
- 如何使用标准库网络 TS 在服务器和客户端之间发送消息C++
- 客户端发送消息,但服务器在客户端结束程序之前不接收消息
- 节点.js到 c++ 客户端:不接收来自 socket.emit 的消息
- Qt WebSockets,如何向客户端发送消息
- 使 gRPC 客户端处于侦听模式,以侦听来自服务器的消息
- 多线程套接字编程服务器仅从 1 个客户端线程获取消息
- 无法使用C#TCP服务器和C TCP客户端接收消息
- 从客户端到浏览器的CEF中的消息传递序列化
- UDP 客户端不会在 esp32 上广播消息
- 带有 TLS v. 1.2 和 SSL v.3 电子邮件客户端的 Boost.Asio 上下文:ssl3 警报意外消息
- Datagram套接字服务器未从客户端接收消息
- 服务器进程等待客户端输入/消息的最佳方法是什么?
- 为什么我的android客户端无法接收到来自winsock c++服务器的字符串消息
- 套接字编程中的客户端到客户端消息传递
- Qt TCP服务器/多客户端消息读取