NodeJS UDP多播如何

我试图发送一个UDP组播包到:230.185.192.108,所以每个人订阅将收到。 有点卡住了。 我相信它的播放是正确的,但似乎无法与任何客户端进行比较。

服务器:

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(); } 

客户

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

参考更多关于NodeJS数据报的信息

  • http://nodejs.org/api/dgram.html

更改:

 client.addMembership('230.185.192.108'); 

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

这个答案是旧的,但在Google的search结果中显示得很高。 使用Node v4.4.3,服务器示例失败,并显示错误EBADF。 代码的完整工作块如下所示:

服务器:

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

客户:

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

对于像我这样的新手, client.bind(PORT,HOST); 是重要的一点。 当绑定到HOST=127.0.0.1 ,我无法让客户端收到任何东西,但在使用IP地址时却工作。 再次,HOST如果排除,这个例子在使用单个机器testing时将不起作用(客户端将抛出EADDRINUSE错误)