将文本帧发送到WebSocket echo服务器
Send Textframe to WebSocket echo-server
我正在用C++编写一个WebSocket实现。现在它几乎完成了,我想在这个WebSocket echo服务器上测试它。首先,我在HTTP握手中连接到它和Upgrade
到WebSocket协议。
然后我发送一个文本帧;这是一个测试";作为内容。这是我的程序发送的:
FRRR-OP- M-LENGTH MASK-KEY
10000001 10001110 00000100
MASK-KEY MASK-KEY MASK-KEY
01000101 11010000 01101011
--DATA-- --DATA-- --DATA--
01010000 00101101 10111001
--DATA-- --DATA-- --DATA--
00011000 00100100 00101100
--DATA-- --DATA-- --DATA--
10100011 01001011 01100101
--DATA-- --DATA-- --DATA--
01100101 10000100 00001110
--DATA-- --DATA--
01110111 00110001
我会很快解释这些字母:
- F:表示这是消息中的最后一个片段(引用RFC6455)
- RRR:RSV1、RSV2、RSV3。除非使用扩展名,否则始终为0
- -OP-:操作代码。操作代码1=短信
- M:指示数据是否被屏蔽。1=它被屏蔽
- -LENGTH:数据的字节长度(不包括掩码)
- MASK-KEY:用于加密数据的密钥。总是4字节长
来自RFC6455
要将屏蔽数据转换为未屏蔽数据,或反之亦然应用以下算法。同样的算法也适用无论翻译的方向如何,例如应用步骤来屏蔽数据,如同取消屏蔽数据一样。
变换后的数据的八位位组i("transformed-Octet-i")是XOR原始数据的八位位组i("original-octet-i")掩蔽密钥("masking-key-octet-j")的索引i模4:
j = i MOD 4 transformed-octet-i = original-octet-i XOR masking-key-octet-j
- 数据:加密数据("This is a Test")
发送此帧后,echo服务器需要很长时间才能响应(~45秒),这就是我得到的数据:
FRRR-OP- M-LENGTH --DATA--
10000001 00001110 01010100
--DATA-- --DATA-- --DATA--
01101000 01101001 01110011
--DATA-- --DATA-- --DATA--
00100000 01101001 01110011
--DATA-- --DATA-- --DATA--
00100000 01100001 00100000
--DATA-- --DATA-- --DATA--
01010100 01100101 01110011
--DATA-- --DATA-- --DATA--
01110100 10001001 00000000
将数据转换为字符串会导致这种情况。
This is a Test‰
所以这里出了问题。它不可能是错误的OP代码,因为服务器会做出响应。这不可能是错误的加密,因为服务器可以解密数据。长度也没有错,你可以怎么看。然而,奇怪的是,服务器需要很长时间才能做出响应。它似乎在等待更多的数据。
最后两个字节(10001001
、00000000
)是一个没有有效负载的ping帧。
相关文章:
- Websocket++ 错误:收到错误handle_transport_init TLS 握手失败
- 在 C++ 中使用逗号的 echo 命令中存在问题
- 如何使用 boost beast websocket 客户端收听 websocket feed?
- Boost (Beast) websocket:同步写入挂起
- Printf 和 Echo 提供不同的输出
- boost beast Websocket Multi Request Server/Client 并不是真正的 mul
- 提升 Websocket 并io_context可重用性,以实现连接的可重新建立性
- 使用websocket时消息被延迟
- Websocket 客户端在 C++ 中使用 boost::Beast - 在写入操作时抛出错误
- 在QT中的两个窗口之间共享websocket连接
- 断开连接后重新连接boost beast(asio)websocket和http连接时出错
- 为什么Boost Variant使用模板构造函数而不是Boost::beast::websocket::stream的移
- boost beast websocket服务器也接受http连接
- 与Poco库的Websocket连接
- Aysnc 处理程序用于 POCO Websocket 中的传入消息
- C++ WebSocket 帧发送会导致服务器关闭连接
- Boost::Beast Websocket Bidirection Stream (C++)
- 如何在 Boost::Beast 上继续使用 websocket?
- 使用Echo客户端示例从Qt UI连接到WebSocket服务器
- 将文本帧发送到WebSocket echo服务器