Если ваше сообщение меньше или равно 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 означает, что это последний (и единственный) кадр этого сообщения (т.е. без фрагментации).
- Следующий байт - это маска и длина.Сообщения клиент-сервер должны быть замаскированы так, чтобы был установлен верхний бит.Если полезная нагрузка длиннее 125 байтов, то поле полезной нагрузки расширяет еще 2 или 8 байтов в заголовке.Поскольку это не так, это просто.
- Поскольку маска является работающим XOR для полезной нагрузки, использование всех нулей для маски означает, что полезная нагрузка может быть отправлена как есть (например, XOR с нулями не используется).).
- Если ваше устройство будет работать произвольно ненадежно (например, Javascript в браузере), тогда вам следует использовать реальное случайное значение маски.Если это устройство Arduino, работающее под вашим собственным кодом, проблем не возникает, и вы можете использовать маску без опций (вам все равно нужно иметь маску в соответствии со спецификацией).
Если вы хотитеЧтобы выйти за рамки тривиального случая, я предлагаю взглянуть на диаграмму кадрирования в разделе 5 спецификации