node.js udp socket.io multicast

node.js - NodeJS UDP Multicast Cómo



socket.io (2)

Esta respuesta es antigua, pero se muestra alta en los resultados de búsqueda de Google. Con Node v4.4.3, el ejemplo del servidor falla con el error EBADF. El bloque de código de trabajo completo se enumera a continuación:

Servidor:

//Multicast Server sending messages var news = [ "Borussia Dortmund wins German championship", "Tornado warning for the Bay Area", "More rain for the weekend", "Android tablets take over the world", "iPad2 sold out", "Nation''s rappers down to last two samples" ]; var PORT = 41848; var MCAST_ADDR = "230.185.192.108"; //not your IP and should be a Class D address, see http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml var dgram = require(''dgram''); var server = dgram.createSocket("udp4"); server.bind(PORT, function(){ server.setBroadcast(true); server.setMulticastTTL(128); server.addMembership(MCAST_ADDR); }); setInterval(broadcastNew, 3000); function broadcastNew() { var message = new Buffer(news[Math.floor(Math.random()*news.length)]); server.send(message, 0, message.length, PORT,MCAST_ADDR); console.log("Sent " + message + " to the wire..."); }

Cliente:

//Multicast Client receiving sent messages var PORT = 41848; var MCAST_ADDR = "230.185.192.108"; //same mcast address as Server var HOST = ''192.168.1.9''; //this is your own IP var dgram = require(''dgram''); var client = dgram.createSocket(''udp4''); client.on(''listening'', function () { var address = client.address(); console.log(''UDP Client listening on '' + address.address + ":" + address.port); client.setBroadcast(true) client.setMulticastTTL(128); client.addMembership(MCAST_ADDR); }); client.on(''message'', function (message, remote) { console.log(''MCast Msg: From: '' + remote.address + '':'' + remote.port +'' - '' + message); }); client.bind(PORT, HOST);

Para los novatos como yo, client.bind(PORT,HOST); es lo importante. No pude conseguir que el cliente recibiera nada cuando estaba vinculado a HOST=127.0.0.1 , pero funcionó cuando se usó la dirección IP. Nuevamente, HOST si se excluye, el ejemplo no funcionará cuando se realice la prueba con una sola máquina (el cliente lanzará el error EADDRINUSE)

Estoy intentando enviar un paquete de multidifusión UDP a: 230.185.192.108 para que todos los suscritos reciban. Un poco estancado. Creo que se está transmitiendo correctamente, pero parece que no puede captar nada con ningún cliente.

Servidor:

var news = [ "Borussia Dortmund wins German championship", "Tornado warning for the Bay Area", "More rain for the weekend", "Android tablets take over the world", "iPad2 sold out", "Nation''s rappers down to last two samples" ]; var dgram = require(''dgram''); var server = dgram.createSocket("udp4"); server.bind(); server.setBroadcast(true) server.setMulticastTTL(128); server.addMembership(''230.185.192.108''); setInterval(broadcastNew, 3000); function broadcastNew() { var message = new Buffer(news[Math.floor(Math.random()*news.length)]); server.send(message, 0, message.length, 8088, "230.185.192.108"); console.log("Sent " + message + " to the wire..."); //server.close(); }

Cliente

var PORT = 8088; var HOST = ''192.168.0.102''; var dgram = require(''dgram''); var client = dgram.createSocket(''udp4''); client.on(''listening'', function () { var address = client.address(); console.log(''UDP Client listening on '' + address.address + ":" + address.port); client.setBroadcast(true) client.setMulticastTTL(128); client.addMembership(''230.185.192.108''); }); client.on(''message'', function (message, remote) { console.log(''A: Epic Command Received. Preparing Relay.''); console.log(''B: From: '' + remote.address + '':'' + remote.port +'' - '' + message); }); client.bind(PORT, HOST);

Referencias Más información sobre NodeJS Datagram


Cambiado

client.addMembership(''230.185.192.108'');

a

client.addMembership(''230.185.192.108'',HOST); //Local IP Address