pasé mucho tiempo tratando de ser capaz de hacer Transmisión UDP y multidifusión entre computadoras. Esperemos que esto lo haga más fácil para otros, ya que este tema es bastante difícil de encontrar respuestas en la web. Estas soluciones funcionan en el Nodo 0.12.5:
UDP Radiodifusión
Calcular la dirección de difusión
Dirección de difusión = (~ máscara de subred) | (dirección IP del host) - ver Wikipedia. Use ipconfig
(Windows) o ifconfig
(Linux), o revise el netmask module.
servidor (recuerde que debe cambiar BROADCAST_ADDR a la dirección de difusión correcta)
var PORT = 6024;
var BROADCAST_ADDR = "58.65.67.255";
var dgram = require('dgram');
var server = dgram.createSocket("udp4");
server.bind(function() {
server.setBroadcast(true);
setInterval(broadcastNew, 3000);
});
function broadcastNew() {
var message = new Buffer("Broadcast message!");
server.send(message, 0, message.length, PORT, BROADCAST_ADDR, function() {
console.log("Sent '" + message + "'");
});
}
cliente
var PORT = 6024;
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.on('message', function (message, rinfo) {
console.log('Message from: ' + rinfo.address + ':' + rinfo.port +' - ' + message);
});
client.bind(PORT);
UDP multidifusión
direcciones de multidifusión
Mirando el IPv4 Multicast Address Space Registry y más aclaraciones en profundidad en la sección 6 RFC 2365 manual, nos encontramos con las direcciones de multidifusión ámbito local son apropiados 239.255.0.0/16 y 239.192.0.0/14 (es decir, a menos que obtenga permiso para use otros).
El código de multidifusión a continuación funciona bien en Linux (y en muchas otras plataformas) con estas direcciones.
Windows 8 (y aparentemente Windows 7 y posiblemente otros) envía y escucha multidifusiones a través de interfaces específicas, y de forma predeterminada a menudo elige la interfaz incorrecta, por lo que nunca recibirá multidifusiones en otra máquina (solo las recibe en localhost) (Me tomó horas para resolver esto a través de pruebas.) Para que el código funciona correctamente, cambie el código de modo que especifique la dirección IP del host para la interfaz que desea utilizar, de la siguiente manera:
Servidor - server.bind(SRC_PORT, HOST_IP_ADDRESS, function() ...
Cliente - client.addMembership(MULTICAST_ADDR, HOST_IP_ADDRESS);
Tome un vistazo a estas fuentes de apoyo: NodeJS, Java, C#, y una útil command a ver qué direcciones de multidifusión que está suscrito - netsh interface ipv4 show joins
Servidor
var SRC_PORT = 6025;
var PORT = 6024;
var MULTICAST_ADDR = '239.255.255.250';
var dgram = require('dgram');
var server = dgram.createSocket("udp4");
server.bind(SRC_PORT, function() {
setInterval(multicastNew, 4000);
});
function multicastNew() {
var message = new Buffer("Multicast message!");
server.send(message, 0, message.length, PORT, MULTICAST_ADDR, function() {
console.log("Sent '" + message + "'");
});
}
cliente
var PORT = 6024;
var MULTICAST_ADDR = '239.255.255.250';
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.on('message', function (message, rinfo) {
console.log('Message from: ' + rinfo.address + ':' + rinfo.port + ' - ' + message);
});
client.bind(PORT, function() {
client.addMembership(MULTICAST_ADDR);
});
¿Cuál es tu pregunta? – TJHeuvel