如何在Chrome应用程序使用JavaScript字符串发送通过UDP(How to send st

2019-10-22 14:33发布

我写一个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);
            }
        });
    });
});

问题的关键在于,当我尝试发送(),和参数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)

我认为该函数将我的字符串更改为一个字节数组? 怎么了??

Answer 1:

有一个在你的一个微小的失误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 ? 请参见本指南从Chrome中的文档链接。



文章来源: How to send string over UDP using Javascript on Chrome app