我正在构建一个节点应用程序,它记录网络上的多播RTP流。这是我的代码:
var server = dgram.createSocket({type: 'udp4',reuseAddr: true});
server.on('listening', function () {
var address = server.address();
server.addMembership("<the multicast group>");
console.log('UDP Server listening on ' + address.address + ":" + address.port);
});
server.on('message', function (message, remote) {
// do some stuff
});
此进程不是在此主机上此端口上接收多播数据报的唯一进程(因此reuseAddr: true
)。
当我这样做时,每个多播数据报的消息事件都会触及这台机器上的接口,而不仅仅是这个进程订阅的那个。不是问题 - 只要我可以过滤掉我不关心的数据报。
不幸的是,我不知道发送我关心的数据包的实际主机,我只知道多播组。因此,如果我查看remote
,我会得到类似的内容:
{ address: '10.10.11.6', family: 'IPv4', port: 5004, size: 84 }
哪个不告诉我数据报发送到哪个组播组。有效载荷本身在解码后也没有给我任何线索。
有什么方法可以过滤我关心的多播组吗?