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

我可以在运行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"],

这是我的网络代码:

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(){})
    });
});

这是当我收到数据包时:

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

编辑:我一直在尽我所能了解为什么我无法在Android上的Chrome应用程序中获取任何广播数据包。 不幸的是,我碰到了一堵墙。


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

1.3.0(2016年9月27日)

添加chrome.udp.setBroadcast()

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


chrome-apps-sockets-udp的cordova插件默认不会接收广播。 但是,通过对插件src进行一些本地修改(请参阅下面的步骤),您可以启用接收广播消息。 以下信息已在Android上成功通过测试,并希望此信息对其他可能难以收到广播消息的人有所帮助。

1)检查你是否已经为chrome-apps-sockets-udp安装了cordova插件

cordova plugin list

如果你看到这个信息,那么插件已经安装

cordova-plugin-chrome-apps-sockets-udp 1.2.2 "Chrome Apps Sockets UDP API"

2)如果您没有看到列出的插件,请安装它:

cordova plugin add cordova-plugin-chrome-apps-sockets-udp

3)接下来,确保你已经添加了你的平台:(下面的离子例子,phonegap有类似的命令)

ionic platform android

4)然后为您的应用程序构建:(下面的离子示例,phonegap具有类似的命令)

ionic build android

5)现在让我们在Android平台上编辑src文件。 在文本编辑器中或从IDE中浏览到<appname>/platforms/android/src/org/chromium目录并打开ChromeSocketsUdp.java文件。 搜索此方法void bind(String address, int port)和此行后面的channel.socket().setReuseAddress(true); 添加以下行channel.socket().setBroadcast(true); 然后保存该文件。

绑定方法现在应该如下所示:

  void bind(String address, int port) throws SocketException {
    channel.socket().setReuseAddress(true);
    channel.socket().setBroadcast(true);
    channel.socket().bind(new InetSocketAddress(port));

    if (multicastSocket != null) {
      bindMulticastSocket();
    }
  }

6)运行你的应用程序,例如ionic run android和广播udp消息现在应该被你的Android应用程序接收。

注意:以上所做的这些本地更改将在下一次构建期间被覆盖。 所以如果您对测试结果满意,可以修改位于<appname>/plugins/cordova-plugin-chrome-apps-sockets-udp/src/android/ChromeSocketsUdp.java的插件src文件

这里是我写的用于测试Android上的UDP广播接收的离子应用的相关代码段的要点链接gist.github.com/bfalzarano/e530ca80767a0aea71a145be44943941


你是否已经为chrome-sockets-udp安装了cordova插件?

从您项目根目录的终端,输入:

cordova plugin add cordova-plugin-chrome-apps-sockets-udp
链接地址: http://www.djcxy.com/p/84571.html

上一篇: How to receive UDP broadcast packets in Chrome App running on Android

下一篇: C class overrides a method