2012-01-18 244 views

回答

1

如果你的消息均为小于或等于125个字节,如果你只是从客户端发送(永不接收),那么你可以使用真是小巫见大巫算法。

这里是你将如何构建一个框架使用Python发送:

"\x81%c\x00\x00\x00\x00%s" % (128 + len(payload), payload) 

或者交替进行,这里是你如何能做到这一点在C:

#include <string.h> 
#include <stdio.h> 
... 
char frame[131]; 
frame[0] = '\x81'; 
frame[1] = 128 + strlen(payload); 
frame[2] = '\x00'; 
frame[3] = '\x00'; 
frame[4] = '\x00'; 
frame[5] = '\x00'; 
snprintf(frame+6, 125, "%s", payload); 

说明:

  • 第一个字节0x81表示这是这个m的最后(也是唯一的)帧消息(即没有碎片)。
  • 下一个字节是掩码和长度。客户端到服务器消息必须被屏蔽,以便设置最高位。如果有效载荷长度超过125个字节,则有效载荷字段会在头中扩展另外2或8个字节。既然不是,那很简单。
  • 由于掩码在有效负载上是一个正在运行的XOR,所以对掩码使用全零意味着可以按原样发送有效负载(例如,与零进行异或是无操作)。
  • 如果您的设备将运行任意不受信任(例如在浏览器中的Javascript),那么您应该使用一个真正的随机掩码值。如果这是一个运行自己的代码的Arduino设备,那么就没有问题了,你可以使用no-op掩码(你仍然必须根据规范有一个掩码)。

如果你想超越平凡的情况下,建议在section 5 of the spec

+0

我无法理解的框架图看框架图。什么是编码较长的消息的Python语法?信息可以多久? – shaun5 2012-03-06 05:10:50

+0

@ shaun5,如果帧长度为126-65535字节,则字节1的长度值为126,然后长度以字节2和3编码。如果有效负载长于65535字节,则将127放入字节1 ,并且字节2-9具有有效载荷长度。理论上有效载荷可能是2^64字节长(160亿GB),但没有客户端或服务器支持。 – kanaka 2012-03-06 05:26:55

相关问题