UDP多播广播节点

我正在尝试创build一个基于UDP多播的聊天程序,这个想法是本地networking上的任何人都可以popup并开始input和发送消息。

我认为每个客户端都需要两个套接字,一个发送消息,另一个接收消息。

简而言之,这就是我现在所拥有的:

"using strict"; const multicast_addr = "224.1.1.1", bin_addr = "0.0.0.0", port = 6811; var udp = require("dgram"); var listener = udp.createSocket("udp4"), sender = udp.createSocket("udp4"); listener.bind(port, multicast_addr, function(){ listener.addMembership(multicast_addr); listener.setBroadcast(true); }); listener.on("message", function (b, other) { console.log(b.toString().trim()); }); process.stdin.on("data", function (data){ sender.send(data, 0, data.length, port, multicast_addr); }); 

(不要介意回声,这是应用程序逻辑将build立在顶部)

这会将消息回显给运行代码的人,但是我也同时在同一台计算机OS X上的linux VM上运行这个消息,但是根本没有看到消息被传递。

我不确定这是否意味着

1)我的代码不正确

2)虚拟机与主机有相同的networking?

3)代码是正确的,但我的家庭路由器阻止多广播数据包?

啊,我发现这个重复使用端口地址的巧妙技巧。

 "using strict"; const multicast_addr = "224.1.1.1", bin_addr = "0.0.0.0", port = 6811; var udp = require("dgram"); var listener = udp.createSocket({type:"udp4", reuseAddr:true}), sender = udp.createSocket({type:"udp4", reuseAddr:true}); listener.bind(port, multicast_addr, function(){ listener.addMembership(multicast_addr); listener.setBroadcast(true); }); listener.on("message", function (b, other) { console.log(b.toString().trim()); }); process.stdin.on("data", function (data){ sender.send(data, 0, data.length, port, multicast_addr); }); 

致力于让OS X通过本地networking与非VM Ubuntu进行通信。