UDP组播系统

时间:2015-10-30 17:17:29

标签: javascript node.js distributed multicast peer

我正在尝试创建一个使用点对点架构和多播通信的分布式信息系统。

首先,我开始实现多播通信。我从来没有这样做,所以我有一些难以理解的问题,为什么它不能正常工作。

以下是我设法做的事情:

服务器

var SRC_PORT = 6025;
var PORT = 6024;
var MULTICAST_ADDR = '239.255.255.250';
var dgram = require('dgram');
var server = dgram.createSocket("udp4");

server.bind(SRC_PORT, function () {
    setInterval(multicastNew, 4000);
});

function multicastNew() {
    var message = new Buffer("Multicast message!");
    server.send(message, 0, message.length, PORT , MULTICAST_ADDR, function () {
        console.log("Sent '" + message + "'");
    });
}

客户端

var PORT = 6024;
var MULTICAST_ADDR = '239.255.255.250';
var dgram = require('dgram');
var client = dgram.createSocket('udp4');

client.on('listening', function () {
    client.setBroadcast(true);
    var address = client.address();
    console.log('UDP Client listening on ' + address.address + ":" + address.port);
});

client.on('message', function (message, rinfo) {
    console.log('Message from: ' + rinfo.address + ':' + rinfo.port + ' - ' + message);
});

client.bind(PORT, function () {
    client.addMembership(MULTICAST_ADDR);
});

当我启动服务器和客户端时,一切正常。来自server.js成功的消息将发送到client.js。

问题

当我想拥有多个客户端(节点)时,会出现问题。在将来,我想向所有客户(节点)请求我做出的错误,它不允许使用多播从所有客户端发送一些信息。

使用上面的代码我无法同时打开2个客户端来接收来自服务器的消息。

尝试连接多个客户端时出现以下错误:

events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: bind EADDRINUSE
    at exports._errnoException (util.js:746:11)
    at dgram.js:224:28
    at dns.js:85:18
    at process._tickCallback (node.js:355:11)
    at Function.Module.runMain (module.js:503:11)
    at startup (node.js:129:16)
    at node.js:814:3

我知道问题是我使用相同的代码两次(client.js)具有相同的端口和其他参数。 我为了发送(通过server.js)并在更多客户端上使用多播接收成功的消息而犯了什么错误?

2 个答案:

答案 0 :(得分:1)

我不确定您使用的操作系统,但您可以在该主机上使用不同的IP创建7个虚拟接口,并为每个客户使用唯一的IP。

这样,所有客户端都可以绑定到同一个端口并与服务器

通信

HTH

答案 1 :(得分:0)

要允许多个多播客户端在同一端口上接收消息,您需要设置SO_REUSEADDRIP_MULTICAST_LOOP套接字选项。