Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.12.2015, 09:39
Новичок на форуме
Отправить личное сообщение для sally555 Посмотреть профиль Найти все сообщения от sally555
 
Регистрация: 17.12.2015
Сообщений: 4

Вопросы по WebSocket
Пытаюсь отправить бинарные данные из WebSocketClient-а, на стороне WebSocketServer-а срабатывает событие WStype_TEXT, а не WStype_BIN, может я не так отправляю? Вот фрагменты кода:
var bindata = 55;
...
function init(){
var host = "ws://192.168.4.1:81/";
soc = new WebSocket(host);
...
}
...
function sendbin(){
soc.send(bindata);
}
Ответить с цитированием
  #2 (permalink)  
Старый 18.12.2015, 07:33
Новичок на форуме
Отправить личное сообщение для sally555 Посмотреть профиль Найти все сообщения от sally555
 
Регистрация: 17.12.2015
Сообщений: 4

Серверная часть собрана на wifi модуле esp8266, библиотечки для организации WebSocket написаны на C++, думал в них проблема. Разобрал исходники библиотек по "косточкам", там где обрабатывается запрос от WebSocketClient-а все верно, типы сообщений обрабатываются как надо. А данные действительно приходят WStype_TEXT типа, отправленное число 55 приходит в виде "35,35". Видимо BIN-данные нужно как то хитро отправлять. Я в JS не силен, знания времен 2000х годов, как то не было надобности, может кто подскажет в чем у меня косяк?
Ответить с цитированием
  #3 (permalink)  
Старый 18.12.2015, 14:04
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Скорее всего, у клиентского сокета надо выставить binaryType="arraybuffer".
И отправлять не число, а ArrayBuffer.

https://developer.mozilla.org/en-US/.../API/WebSocket
Ответить с цитированием
  #4 (permalink)  
Старый 19.12.2015, 06:24
Новичок на форуме
Отправить личное сообщение для sally555 Посмотреть профиль Найти все сообщения от sally555
 
Регистрация: 17.12.2015
Сообщений: 4

делал и так
var ArrBuffData = new Array(10);
ArrBuffData[0]=15;
ArrBuffData[1]=12;
ArrBuffData[2]=2;
ArrBuffData[3]=0;
ArrBuffData[4]=1;
ArrBuffData[5]=5;
ArrBuffData[6]=12;
ArrBuffData[7]=17;
ArrBuffData[8]=100;
ArrBuffData[9]=200;
...
soc.binaryType = 'arraybuffer';
...
soc.send(ArrBuffData);

все равно приходит в текстовом формате
Ответить с цитированием
  #5 (permalink)  
Старый 21.12.2015, 09:19
Новичок на форуме
Отправить личное сообщение для sally555 Посмотреть профиль Найти все сообщения от sally555
 
Регистрация: 17.12.2015
Сообщений: 4

Сообщение от Яростный Меч Посмотреть сообщение
И отправлять не число, а ArrayBuffer.
https://developer.mozilla.org/en-US/.../API/WebSocket
Спасибо за ссылку, разобрался, все заработало.
Вот примерчик для наглядности нацарапал, массивы с разной разрядностью 8,16 и 32:
function sendbin(){
//var ArrBuffDt = new ArrayBuffer(10);
var ArrBuffData = new Int8Array(10);
ArrBuffData[0]=17;
ArrBuffData[1]=12;
ArrBuffData[2]=2;
ArrBuffData[3]=0;
ArrBuffData[4]=1;
ArrBuffData[5]=5;
ArrBuffData[6]=12;
ArrBuffData[7]=17;
ArrBuffData[8]=100;
ArrBuffData[9]=20;
soc.send(ArrBuffData);
//delete ArrBuffDt;
delete ArrBuffData;

var ArrBuffDt = new ArrayBuffer(20);
var ArrBuffData = new Int16Array(ArrBuffDt);
ArrBuffData[0]=17;
ArrBuffData[1]=12;
ArrBuffData[2]=2;
ArrBuffData[3]=0;
ArrBuffData[4]=1;
ArrBuffData[5]=5;
ArrBuffData[6]=12;
ArrBuffData[7]=17;
ArrBuffData[8]=100;
ArrBuffData[9]=20;
soc.send(ArrBuffDt);
delete ArrBuffDt;
delete ArrBuffData;

var ArrBuffDt = new ArrayBuffer(40);
var ArrBuffData = new Int32Array(ArrBuffDt);
ArrBuffData[0]=17;
ArrBuffData[1]=12;
ArrBuffData[2]=2;
ArrBuffData[3]=0;
ArrBuffData[4]=1;
ArrBuffData[5]=5;
ArrBuffData[6]=12;
ArrBuffData[7]=17;
ArrBuffData[8]=100;
ArrBuffData[9]=20;
soc.send(ArrBuffData);
delete ArrBuffDt;
delete ArrBuffData;
}


А это то что приходит на стороне сервера:
Код:
[1] Disconnected from ESP8266!
2
[0] Connected from 192.168.4.2 url: /
4
[0] get binary lenght: 10

[HEXDUMP] Address: 0x3FFF30B8 len: 0xA (10)
[0x3FFF30B8] 0x00000000: 11 0C 02 00 01 05 0C 11 64 14 
4
[0] get binary lenght: 20

[HEXDUMP] Address: 0x3FFF36F8 len: 0x14 (20)
[0x3FFF36F8] 0x00000000: 11 00 0C 00 02 00 00 00 01 00 05 00 0C 00 11 00 
[0x3FFF3708] 0x00000010: 64 00 14 00 
4
[0] get binary lenght: 40

[HEXDUMP] Address: 0x3FFF3F50 len: 0x28 (40)
[0x3FFF3F50] 0x00000000: 11 00 00 00 0C 00 00 00 02 00 00 00 00 00 00 00 
[0x3FFF3F60] 0x00000010: 01 00 00 00 05 00 00 00 0C 00 00 00 11 00 00 00 
[0x3FFF3F70] 0x00000020: 64 00 00 00 14 00 00 00 
1
[0] Disconnected from ESP8266!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение данных из websocket UnRealm Общие вопросы Javascript 2 14.02.2017 00:56
WebSockets / Error during WebSocket handshake: Unexpected response code: 200 Siend Общие вопросы Javascript 1 10.11.2015 16:39
WebSocket - nodejs SVARAI AJAX и COMET 2 17.02.2014 08:41
websocket роутинг на сервере mue AJAX и COMET 18 08.10.2013 14:16
node.js - ws & websocket Reflexion AJAX и COMET 1 09.04.2013 01:14