【发布时间】: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();
}
【问题讨论】:
标签: javascript socket.io datagram udpclient dgrams