UDP多播系统

我正在尝试创build一个分布式信息系统,使用对等体系结构与多播通信。

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

这是我设法做到的:

服务器

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。

问题

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

使用上面的代码,我不能同时打开两个客户端从服务器上接收消息。

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

 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)并在更多的客户端上使用多播接收成功的消息,我正在犯什么错误?

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

这样所有的客户端可以绑定到相同的端口,并与服务器通话

HTH

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