Этот код предназначен только для Firefox 8 и Chrome 15 и выше. Поэтому я предполагаю, что ваш рабочий код в более ранних браузерах отличается от того, что вы опубликовали, так как они имеют другой формат проводов.
Есть несколько проблем с вашим кодом:
- Вам нужно выбрать и отправить обратно протокол, если браузер отправляет заголовок протокола (что, вероятно, будет).
- Вам необходимо отправлять возврат каретки + перевод строки после каждого заголовка (CR + LF, '\ r \ n', 0x0D0A).
- После окончательного заголовка вам нужно отправить дополнительный возврат каретки + перевод строки (т. Е. '\ R \ n \ r \ n'), чтобы указать завершение рукопожатия.
Ваш алгоритм отправки также чрезмерно упрощен (хотя он должен работать для вас, например). Если длина сообщения превышает 126 байтов, вы должны закодировать длину в несколько байтов заголовка кадра.
Также обратите внимание, что для получения фреймов вам потребуется снять маску с полезной нагрузки. Первые четыре байта полезной нагрузки являются значениями маскирования. Вам необходимо XOR эти значения для следующих значений полезной нагрузки. Как указано в спецификации :
j = i MOD 4
transformed-octet-i = original-octet-i XOR masking-key-octet-j