如何在Chrome应用程序上使用Javascript通过UDP发送字符串

如何在Chrome应用程序上使用Javascript通过UDP发送字符串,javascript,arrays,udp,google-chrome-app,Javascript,Arrays,Udp,Google 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 s

我正在编写一个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);
            }
        });
    });
});
我收到的错误消息是:

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;
}
函数stringToArrayBuffer(字符串){
var arrayBuffer=新的arrayBuffer(string.length*2);
var buffer=新的Uint8Array(arrayBuffer);
对于(var i=0,stringLength=string.length;i
因此,您只使用一个整数值覆盖二进制数组

但我不确定这是唯一的问题。为什么要使用
Uint8
而不是
Uint16
?请参阅Chrome文档中的链接

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;
}