如何在Android上运行的Chrome App中接收UDP广播数据包

JPa*_*h88 7 javascript udp cordova google-chrome-app cordova-chrome-app

在运行Chrome应用程序的Windows中,我可以毫无问题地接收广播数据包.但是,当我使用该应用程序并使用cordova/crosswalk工具进行编译时,我似乎无法接收任何数据包.我看到wireshark中的所有数据包.我的数据包从172.24.0.42传输,并在172.24.255.255上广播(255.255.255.255上的广播在Android上不起作用,但它在Windows Chrome应用程序上有效).

这是我的(manifest.json):

"sockets":{
        "udp": {
            "bind": "*"
        }
    }, 
    "permissions":["system.network" , "power"],
Run Code Online (Sandbox Code Playgroud)

这是我的网络代码:

chrome.sockets.udp.create({}, function(socketInfo) {
    socketId = socketInfo.socketId;
    // Setup event handler and bind socket.
    chrome.sockets.udp.onReceive.addListener(onReceive);
    chrome.sockets.udp.bind(socketId, "0.0.0.0", 4213, function(result) {
        if (result < 0) {
            console.log("Error binding socket.");
            return;
        }
    //chrome.sockets.udp.send(socketId, arrayBuffer, '127.0.0.1', 1337, function(sendInfo) {
    //  console.log("sent " + sendInfo.bytesSent);
    //  })
    //chrome.sockets.udp.setBroadcast(socketId, true, function(){})
    });
});
Run Code Online (Sandbox Code Playgroud)

这是我收到数据包的时候:

var onReceive = function(info) {
    if (info.socketId !== socketId)
        return;
    chrome.sockets.udp.setPaused(socketId, true, function(){}); // Set socket paused; Essentially blocking
    //console.log();

    ///processing of my packet

    chrome.sockets.udp.setPaused(socketId, false, function(){}); //unpause socket
};
Run Code Online (Sandbox Code Playgroud)

编辑:我一直在努力理解为什么我不能在Android上的Chrome应用程序中获取任何广播数据包.不幸的是,我遇到了一堵墙.

Gre*_*reg 3

setBroadcast已添加到库中。您现在可以调用setBroadcast()以启用广播权限。

1.3.0(2016 年 9 月 27 日)

添加 chrome.udp.setBroadcast()

https://github.com/MobileChromeApps/cordova-plugin-chrome-apps-sockets-udp