Was*_*RAR 18 javascript udp multicast broadcast node.js
我需要向连接到我的网络的所有机器(服务器)发送广播数据报.
我正在使用NodeJS Multicast
客户
var dgram = require('dgram');
var message = new Buffer("Some bytes");
var client = dgram.createSocket("udp4");
client.send(message, 0, message.length, 41234, "localhost");
// If I'm in the same machine 'localhost' works
// I need to do something 192.168.0.255 or 255.255.255
client.close();
Run Code Online (Sandbox Code Playgroud)
服务器
var dgram = require("dgram");
var server = dgram.createSocket("udp4");
server.on("message", function (msg, rinfo) {
console.log("server got: " + msg + " from " +
rinfo.address + ":" + rinfo.port);
});
server.on("listening", function () {
var address = server.address();
console.log("server listening " + address.address + ":" + address.port);
});
server.bind(41234);
Run Code Online (Sandbox Code Playgroud)
谢谢.
Jos*_*238 20
我花了很多时间试图在计算机之间进行UDP广播和多播.希望这使其他人更容易,因为这个主题很难在网上找到答案.这些解决方案适用于Node 0.12.5:
UDP广播
计算广播地址
广播地址=(〜子网掩码)| (主持人的IP地址) - 请参阅维基百科.使用ipconfig
(Windows)或ifconfig
(Linux),或签出网络掩码模块.
服务器(记得将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 + "'");
});
}
Run Code Online (Sandbox Code Playgroud)
客户
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);
Run Code Online (Sandbox Code Playgroud)
UDP组播
多播地址
查看IPv4多播地址空间注册表以及RFC 2365手册第6节中的更深入的说明,我们发现适当的本地范围多播地址是239.255.0.0/16和239.192.0.0/14(即,除非您获得许可使用其他的).
下面的多播代码在具有这些地址的Linux(以及许多其他平台)上运行良好.
Windows 8(显然是Windows 7,可能还有其他)通过特定接口发送和侦听多播,默认情况下它通常会选择错误的接口,因此您永远不会在另一台计算机上接收多播(您只能在localhost上接收它们).(我花了几个小时才通过测试来解决这个问题.)为了使代码可靠地工作,请更改代码,以便为要使用的接口指定主机的IP地址,如下所示:
服务器 - server.bind(SRC_PORT, HOST_IP_ADDRESS, function() ...
客户 - client.addMembership(MULTICAST_ADDR, HOST_IP_ADDRESS);
看看这些支持来源:NodeJS,Java,C#,以及一个有用的命令,可以查看您订阅的多播地址 -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 + "'");
});
}
Run Code Online (Sandbox Code Playgroud)
客户
var PORT = 6024;
var MULTICAST_ADDR = '239.255.255.250';
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.on('message', function (message, rinfo) {
console.log('Message from: ' + rinfo.address + ':' + rinfo.port + ' - ' + message);
});
client.bind(PORT, function () {
client.addMembership(MULTICAST_ADDR);
});
Run Code Online (Sandbox Code Playgroud)
zne*_*eak 17
我从未使用过Node.js,但我记得使用Berkely套接字(这似乎是最广泛使用的套接字实现),您需要启用SO_BROADCAST
套接字选项才能将数据报发送到广播地址.查看dgram
文档,似乎有一个功能.
var client = dgram.createSocket("udp4");
client.setBroadcast(true);
client.send(message, 0, message.length, 41234, "192.168.0.255");
Run Code Online (Sandbox Code Playgroud)
您可能想以编程方式找到广播地址,但我无法帮助您.
Ing*_*mar 10
我认为自节点0.10.0以来有些事情发生了变化,这对我现在起作用了:
//var broadcastAddress = "127.255.255.255";
var broadcastAddress = "192.168.0.255";
var message = new Buffer("Some bytes");
var client = dgram.createSocket("udp4");
client.bind();
client.on("listening", function () {
client.setBroadcast(true);
client.send(message, 0, message.length, 6623, broadcastAddress, function(err, bytes) {
client.close();
});
});
Run Code Online (Sandbox Code Playgroud)
希望这有助于某人;)
归档时间: |
|
查看次数: |
25718 次 |
最近记录: |