Я пытаюсь создать распределенную информационную систему, использующую одноранговую архитектуру с многоадресной связью.Система многоадресной рассылки UDP
Прежде всего, я начал осуществлять многоадресную передачу. Я никогда не делал этого, поэтому у меня есть некоторые проблемы, которые трудно понять, почему он работает неправильно.
Вот что мне удалось сделать:
Сервер
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 клиента для получения сообщения с сервера на обоих из них.
Здесь ошибка при попытке подключить более 1 клиента:
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-адресов и транслировать с одного компьютера. –
@ItayGrudev Спасибо за подсказку, это действительно работает, если я использую 2 компьютера на одном и том же Wi-Fi. Но мне нужно смоделировать на одной машине, что я могу сделать? – Chris
Я сказал вам, вы можете использовать как проводное соединение, так и ваше Wi-Fi соединение и привязать их к соответствующим IP-адресам. –