2017-07-11 34 views
0

所以我有一个摄像头输出我的本地网络上的UDP组播流,我知道这是否正常工作,因为我可以连接到通过MRL“UDP通过VLC Media Player中的流:// @ {multicast_addr}:{port}。Node.js的多播客户端

我想编写一个NodeJS客户端,它至少会确认它正在接收这些udp数据包,但我似乎无法正确地完成这项工作。我至今

// Working MRL in VLC: udp://@{multicast_addr}:{port} 

var PORT = {port}; 
var HOST = '{local_addr}'; 
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(64); 
    client.addMembership('{multicast_addr}', HOST); 
}); 

client.on('message', function (message, remote) { 
    console.log("Packet received") 
}); 

client.bind(PORT, HOST); 

当我运行它,我得到的消息“UDP客户端侦听{} LOCAL_ADDR:(港口)。”但当时没有“收到的包”的消息谁能告诉米我做错了什么?我误解了udp多播流的工作原理吗?

谢谢任何​​能够帮助的人。

编辑:

好了,所以我得到它的工作,但我不知道怎么样。在最后一行,不是绑定(PORT,HOST),而是绑定(PORT,{multicast_addr})。在运行它时,我的控制台充斥着“收到数据包”消息,现在我比以前更加困惑。

如果有人会关心解释,我将非常感激。

回答

0

addMembership(MADDR, HOST)中,HOST是接口引用,系统将查找关联的物理接口并确保使用该接口订阅。

bind(PORT , HOST)中,HOST现在是您的套接字的唯一IP地址,如果它不是全部地址(v4中为0.0.0.0,如果省略该参数也是默认值),则您将数据包筛选出来其他IP地址,即使他们到达的非单播的原因。

如果你想发送和接收同一插座上,那么你就需要不把它绑定到特定的地址,但它通常是更好的形式使用一个单独的套接字来发送,使他们能够独立调节。