Envoyer le datagramme de diffusion
J'ai besoin d'envoyer un datagramme de diffusion pour toutes les machines (serveurs) connecté à mon réseau.
Je suis en utilisant NodeJS Multidiffusion
Client
var dgram = require('dgram');
var message = new Buffer("Some bytes");
var client = dgram.createSocket("udp4");
client.send(message, 0, message.length, 41234, "localhost");
//If I'm in the same machine 'localhost' works
//I need to do something 192.168.0.255 or 255.255.255
client.close();
Serveurs
var dgram = require("dgram");
var server = dgram.createSocket("udp4");
server.on("message", function (msg, rinfo) {
console.log("server got: " + msg + " from " +
rinfo.address + ":" + rinfo.port);
});
server.on("listening", function () {
var address = server.address();
console.log("server listening " + address.address + ":" + address.port);
});
server.bind(41234);
Grâce.
source d'informationauteur Wassim AZIRAR
Vous devez vous connecter pour publier un commentaire.
Je ne l'ai jamais utilisé Node.js mais je me rappelle qu'avec Berkely sockets (qui semble être la plus largement utilisée de la mise en œuvre de prises de courant), vous devez activer les
SO_BROADCAST
option de socket pour être en mesure d'envoyer des datagrammes à l'adresse de diffusion. La recherche de ladgram
de la documentation, il semble y avoir une fonction pour cela.Vous voudrez peut-être trouver l'adresse de diffusion de la programmation, mais je ne peux pas vous aider avec ça.
J'ai passé beaucoup de temps à essayer d'être en mesure de faire UDP de la radiodiffusion et de la multidiffusion entre les ordinateurs. J'espère que cela rend plus facile pour les autres puisque ce sujet est assez difficile de trouver des réponses sur le web. Ces solutions fonctionnent dans le Nœud 0.12.5:
UDP Radiodiffusion
Calculer l'adresse de diffusion
Adresse de Broadcast = (~masque de sous-réseau) | (adresse IP de l'hôte) - voir Wikipedia. Utilisation
ipconfig
(Windows) ouifconfig
(Linux), ou la caisse de la le masque de réseau du module.Serveur (n'oubliez pas de changer BROADCAST_ADDR à la bonne adresse de diffusion (broadcast)
Client
UDP Multicast
Adresses de multidiffusion
À la recherche à la IPv4 Multicast De L'Espace D'Adresse De Registre et plus en profondeur des précisions dans les RFC 2365 manuel la section 6, nous trouvons le local du champ d'application des adresses de multidiffusion sont 239.255.0.0/16 et 239.192.0.0/14 (qui est, à moins d'obtenir la permission d'utiliser les autres).
La multidiffusion le code ci-dessous fonctionne très bien sous Linux (et de nombreuses autres plates-formes) avec ces adresses.
Windows 8 (et, apparemment, Windows 7 et peut-être d'autres) envoie et à l'écoute de multidiffusions via des interfaces spécifiques, et par défaut, il sera souvent choisir la mauvaise interface, de sorte que vous ne recevrez jamais multidiffusions sur une autre machine (vous recevez seulement sur localhost). (Il m'a fallu des heures pour comprendre cela par le biais de l'essai.) Pour que le code fonctionne de manière fiable, de modifier le code afin de spécifier l'adresse IP de l'hôte pour l'interface que vous souhaitez utiliser, comme suit:
Serveur
server.bind(SRC_PORT, HOST_IP_ADDRESS, function() ...
Client -
client.addMembership(MULTICAST_ADDR, HOST_IP_ADDRESS);
Prendre un coup d'oeil à l'appui des sources: NodeJSJavaC#et un utile commande pour voir les adresses de multidiffusion, vous êtes abonné à -
netsh interface ipv4 show joins
Serveur
Client
Je pense que depuis le nœud 0.10.0 certaines choses ont changé cela fonctionne pour moi maintenant:
Espère que cela aide quelqu'un 😉