2012-01-18 243 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

相關問題