我花了很多時間試圖能夠做到UDP廣播和計算機之間的多播。希望這可以讓其他人更容易,因爲這個主題很難在網上找到答案。這些解決方案在節點0.12.5工作:
UDP廣播
計算廣播地址
廣播地址=(〜子網掩碼)| (主機的IP地址) - 請參閱Wikipedia。使用ipconfig
(Windows)或ifconfig
(Linux),或者檢出netmask module。
服務器(記得BROADCAST_ADDR更改爲正確的廣播地址)
var PORT = 6024;
var BROADCAST_ADDR = "58.65.67.255";
var dgram = require('dgram');
var server = dgram.createSocket("udp4");
server.bind(function() {
server.setBroadcast(true);
setInterval(broadcastNew, 3000);
});
function broadcastNew() {
var message = new Buffer("Broadcast message!");
server.send(message, 0, message.length, PORT, BROADCAST_ADDR, function() {
console.log("Sent '" + message + "'");
});
}
客戶
var PORT = 6024;
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.on('message', function (message, rinfo) {
console.log('Message from: ' + rinfo.address + ':' + rinfo.port +' - ' + message);
});
client.bind(PORT);
UDP多播
組播地址
縱觀IPv4 Multicast Address Space Registry和更深入的澄清在RFC 2365 manual第6節,我們找到了合適的本地範圍多播地址是239.255.0.0/16和239.192.0.0/14(也就是說,除非你獲得許可使用其他的)。
下面的組播代碼在使用這些地址的Linux(以及許多其他平臺)上工作得很好。 (通過特定的接口發送和偵聽多播),默認情況下它會經常選擇錯誤的接口,所以你永遠不會在另一臺機器上接收多播(你只能在本地主機上接收它們)。 (我花了時間通過測試圖了這一點。)對於代碼可靠地工作,更改代碼,使您指定的主機的IP地址,您希望使用的界面,如下所示:
服務器 - server.bind(SRC_PORT, HOST_IP_ADDRESS, function() ...
客戶端 - client.addMembership(MULTICAST_ADDR, HOST_IP_ADDRESS);
看看這些支持來源:NodeJS,Java,C#和樂於助人command看到你訂閱了哪些組播地址 - netsh interface ipv4 show joins
服務器
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 + "'");
});
}
客戶
請告訴我你的問題? – TJHeuvel 2011-05-30 14:18:28