Я написал простой TCP-сервер на node.js для отправки некоторых данных в приложение Chrome. В хромированном приложении, когда я получаю данные, конвертировать, что в строку, используя ниже функции, я получаю исключение «длиной байта Uint16Array должна быть кратна 2»как преобразовать arraybuffer в строку
String.fromCharCode.apply(null, new Uint16Array(buffer))
Я не мог найти информацию о том, что может быть причиной этого и как это исправить. Любые указатели на это высоко ценятся.
Ниже приведен код в Node.js сервера для отправки данных клиента:
socket.on('data', function(data) {
console.log('DATA ' + socket.remoteAddress + ': ' + data);
// Write the data back to the socket,
// the client will receive it as data from the server
var r= socket.write('from server\r\n');
});
Ниже приведен код из хромированного приложения:
chrome.sockets.tcp.onReceive.addListener(function (info) {
console.log('onListener registered');
if (info.socketId != socketid)
return;
else {
try {
data = ab2str(info.data);
console.log(data);
}
catch (e) {
console.log(e);
}
}
// info.data is an arrayBuffer.
});
function ab2str(buf) {
return String.fromCharCode.apply(null, new Uint16Array(buf));
}
вы можете показать больше, как вы получаете буфер? – Victory
В общем, [этот вопрос] (https://stackoverflow.com/questions/6965107/converting-between-strings-and-arraybuffers) является каноническим. Впрочем, я не собираюсь шутить. – Xan