如何在移动设备上的 Cordova 应用程序中接收 UDP 消息?

Posted

技术标签:

【中文标题】如何在移动设备上的 Cordova 应用程序中接收 UDP 消息?【英文标题】:How to receive UDP messages in Cordova application on mobile device? 【发布时间】:2020-08-06 11:50:52 【问题描述】:

我已经编程 2 个月了,我想制作一个移动应用程序,它将与同一 LAN 中的 PC 上的服务器通信。我正在使用 NodeJS Dgram 模块和 Socket.io。我在服务器上广播消息,我想在我的移动设备上看到这些消息,这样当我在设备上启动应用程序时,我会监听消息,然后与发送消息的地址建立套接字连接从。我在网上看到了几个例子/解决方案,但我仍然不明白,这让我更加困惑。目前它运行良好,因为我在一台 PC 上进行广播,在另一台 PC 上运行 node client.js,然后监听这些消息,但我想在移动设备(Cordova 平台)上做同样的事情。

如果可能的话,我的目标是单击一个按钮并开始收听广播消息。

广播代码 - 在服务器上:

const dgram = require('dgram');
            const broadcasts = this.getBroadcastAddresses();
            _broadcasting = setInterval(
                function (broadcasts, dgram, options) 
                    broadcasts.forEach(function (broadcast) 
                        const message = Buffer.from(options.data);
                        console.log(message);
                        const client = dgram.createSocket( type: 'udp4', reuseAddr: true );
                        client.bind(8080, function () 
                            client.setBroadcast(true);
                            client.send(message, 0, message.length, 8080, broadcast, function (err, bytes) 
                                if (err) 
                                    console.error(err);
                                
                                client.close();
                                if (options.hasOwnProperty('callback')) 
                                    options.callback(broadcast, err, bytes);
                                
                                return;
                            );
                        );
                    );
                ,
                options.timer * 1000,
                broadcasts,
                dgram,
                options
            );

客户端监听消息的代码:

    if (util.platform === 'webkit') 
            var dgram = require('dgram');
            _socket = socket = dgram.createSocket( type: 'udp4', reuseAddr: true );
            _socket.on('message', function (message, rinfo) 
                console.log('Message: ' + rinfo.address + ':' + rinfo.port + ' - ' + message);
            );
            _socket.on('listening', () => 
                options.bind_callback(socket.address());
            );

            _socket.bind(8080, '0.0.0.0');
         else if (util.platform === 'cordova') 
            _socket = window.dgram.createSocket('udp4', 8080);
            _socket.on('message', (msg, remote) => 
                options.message_callback(msg.toString(), remote);
            );
            _socket.on('listening', () => 
                options.bind_callback(socket.address());
            );
            _socket.bind();
        

【问题讨论】:

【参考方案1】:

我通过安装 Cordova 插件解决了这个问题,该插件可以使用 UDP 协议,它就像一个魅力。

插件名为cordova-plugin-datagram4,版本为1.0.2。 你可以在这个链接上找到它: https://www.npmjs.com/package/cordova-plugin-datagram4/v/1.0.2

这是我在客户端的操作方式:

getMaster: async () => 
            const datagram = cordova.require('cordova-plugin-datagram4.datagram');
            const _socket = datagram.createSocket('multicast-udp4');
            _socket.bind(port);
            _socket.on('listening', () => 
                let address = socket.address();
                console.log('UDP _socket listening on ' + address.address + ':' + address.port);
            );
            _socket.on('message', function (message, rinfo) 
                console.log('Message from: ' + rinfo.address + ':' + rinfo.port + ' - ' + message);
                document.getElementById('master-ip-field').value = rinfo.address;
                data.host = rinfo.address.trim();
                _socket.close();
                app.settings._makeConnection(rinfo.address);
            );
            return senderAddress;
        ,

我调用 app.getMaster() 开始侦听从同一局域网中的服务器端(NodeJS 服务器)发送的 UDP 数据包。

【讨论】:

以上是关于如何在移动设备上的 Cordova 应用程序中接收 UDP 消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Meteor cordova 移动应用程序中接收共享数据

如何使用JDBC将Cordova应用程序连接到MySQL数据库?

移动地理定位精度 - cordova / phonegap

如何在 android 中远程更新我的 cordova/phonegap 移动应用程序?

如何在 Cordova 手机中配置亚马逊 SNS 以接收推送通知

本地/远程 IOS 设备上的 Visual Studio Cordova 应用程序