如何在 Chrome 应用程序上使用 Javascript 通过 UDP 发送字符串
How to send string over UDP using Javascript on Chrome app
我正在编写一个 chrome 应用程序,我想通过 UDP 将一些字符串发送到某个服务器。我是 javascript 的新手,有点卡住了。这是代码片段:
var wholeString = "what is the meaning of life";
chrome.sockets.udp.create({}, function (socketInfo) {
// The socket is created, now we can send some data
var socketId = socketInfo['socketId'];
var arrayBuffer = stringToArrayBuffer("hello");
chrome.sockets.udp.bind(socketId, "127.0.0.1", 0, function (result) {
chrome.sockets.udp.send(socketId, stringToArrayBuffer(wholeString), "127.0.0.1", 3050, function (sendInfo) {
console.log("sent " + sendInfo.bytesSent);
if (sendInfo.resultCode < 0) {
console.log("Error listening: " + chrome.runtime.lastError.message);
}
});
});
});
问题出在我尝试 send() 时,参数 stringToArrayBuffer(wholeString)
有问题。 stringToArrayBuffer()
在这里:
function stringToArrayBuffer(string) {
var arrayBuffer = new ArrayBuffer(string.length * 2);
var buffer = new Uint8Array(arrayBuffer);
for (var i = 0, stringLength = string.length; i < stringLength; i++) {
buffer = string.charCodeAt(i);
}
return buffer;
}
我收到的错误信息是:
Error in response to sockets.udp.bind: Error: Invocation of form sockets.udp.send(integer, integer, string, integer, function) doesn't match definition sockets.udp.send(integer socketId, binary data, string address, integer port, function callback)
at Object.callback (chrome-extension://pmkjeflkfhfekliappbhemngaejmnbec/helper.js:45:24)
at Object.callback (chrome-extension://pmkjeflkfhfekliappbhemngaejmnbec/helper.js:42:23)
我认为该函数会将我的字符串更改为字节数组?怎么了??
您的 stringToArrayBuffer
函数中有一个小错误。
function stringToArrayBuffer(string) {
var arrayBuffer = new ArrayBuffer(string.length * 2);
var buffer = new Uint8Array(arrayBuffer);
for (var i = 0, stringLength = string.length; i < stringLength; i++) {
buffer[i] = string.charCodeAt(i);
// Was: buffer = string.charCodeAt(i);
}
return buffer;
}
所以你只是用一个整数值覆盖了二进制数组。
不过我不确定这是唯一的问题。你为什么使用 Uint8
而不是 Uint16
?请参阅 this guide 链接自 Chrome 文档。
我正在编写一个 chrome 应用程序,我想通过 UDP 将一些字符串发送到某个服务器。我是 javascript 的新手,有点卡住了。这是代码片段:
var wholeString = "what is the meaning of life";
chrome.sockets.udp.create({}, function (socketInfo) {
// The socket is created, now we can send some data
var socketId = socketInfo['socketId'];
var arrayBuffer = stringToArrayBuffer("hello");
chrome.sockets.udp.bind(socketId, "127.0.0.1", 0, function (result) {
chrome.sockets.udp.send(socketId, stringToArrayBuffer(wholeString), "127.0.0.1", 3050, function (sendInfo) {
console.log("sent " + sendInfo.bytesSent);
if (sendInfo.resultCode < 0) {
console.log("Error listening: " + chrome.runtime.lastError.message);
}
});
});
});
问题出在我尝试 send() 时,参数 stringToArrayBuffer(wholeString)
有问题。 stringToArrayBuffer()
在这里:
function stringToArrayBuffer(string) {
var arrayBuffer = new ArrayBuffer(string.length * 2);
var buffer = new Uint8Array(arrayBuffer);
for (var i = 0, stringLength = string.length; i < stringLength; i++) {
buffer = string.charCodeAt(i);
}
return buffer;
}
我收到的错误信息是:
Error in response to sockets.udp.bind: Error: Invocation of form sockets.udp.send(integer, integer, string, integer, function) doesn't match definition sockets.udp.send(integer socketId, binary data, string address, integer port, function callback)
at Object.callback (chrome-extension://pmkjeflkfhfekliappbhemngaejmnbec/helper.js:45:24)
at Object.callback (chrome-extension://pmkjeflkfhfekliappbhemngaejmnbec/helper.js:42:23)
我认为该函数会将我的字符串更改为字节数组?怎么了??
您的 stringToArrayBuffer
函数中有一个小错误。
function stringToArrayBuffer(string) {
var arrayBuffer = new ArrayBuffer(string.length * 2);
var buffer = new Uint8Array(arrayBuffer);
for (var i = 0, stringLength = string.length; i < stringLength; i++) {
buffer[i] = string.charCodeAt(i);
// Was: buffer = string.charCodeAt(i);
}
return buffer;
}
所以你只是用一个整数值覆盖了二进制数组。
不过我不确定这是唯一的问题。你为什么使用 Uint8
而不是 Uint16
?请参阅 this guide 链接自 Chrome 文档。