NodeJS UDP Multicast How to

前端 未结 2 1508
南旧
南旧 2021-01-31 09:42

I\'m trying to send a UDP Multicast Packet to: 230.185.192.108 so everyone subscribed will receive. A bit stuck. I believe it\'s broadcasting correctly, but can\'t seem to pick

相关标签:
2条回答
  • 2021-01-31 09:45

    This answer is old, but shows up high on Google's search results. With Node v4.4.3, the server example fails with error EBADF. The complete working block of code is listed below:

    Server:

    //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...");
    }
    

    Client:

    //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);
    

    For the novices like me, client.bind(PORT,HOST); is the important bit. I couldn't get the client to receive anything when bound to HOST=127.0.0.1, but worked when the IP address was used. Again, HOST if excluded, the example won't work when testing using a single machine (client will throw EADDRINUSE error)

    0 讨论(0)
  • 2021-01-31 09:57

    Changed:

    client.addMembership('230.185.192.108');
    

    to

    client.addMembership('230.185.192.108',HOST); //Local IP Address
    
    0 讨论(0)
提交回复
热议问题