如何在运行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