我正在用C ++编写WebSocket实现。它现在几乎完成了,我想针对这个WebSocket echo-server进行测试。首先,我在HTTP-Handshake中将它连接到Upgrade
到WebSocket-Protocol。
然后我发送一个文本框架,其中“这是一个测试”作为内容。这就是我的程序发送的内容:
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
我会快速解释这些信件:
来自RFC6455
将屏蔽数据转换为未屏蔽数据,反之亦然 应用以下算法。适用相同的算法 不管翻译的方向如何,例如相同 应用步骤来屏蔽数据以取消屏蔽数据。
转换数据的八位字节(“transformed-octet-i”)是异或 具有八位位组的原始数据(“original-octet-i”)的八位位组i index i模数4的掩码密钥(“masking-key-octet-j”):
j = i MOD 4 transformed-octet-i = original-octet-i XOR masking-key-octet-j
发送此帧后, echo-server 需要很长时间才能响应( ~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-Code,因为服务器会响应。加密不能错,因为服务器可以解密数据。如何看,长度也没错。但是,很奇怪服务器需要很长时间才能响应。好像它正在等待更多数据的到来。