发送广播数据报

| 我需要向连接到网络的所有计算机(服务器)发送广播数据报。 我正在使用NodeJS组播 客户
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();
伺服器
 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);
谢谢。     
已邀请:
        我从未使用过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\");
您可能想以编程方式找到广播地址,但是我无法为您提供帮助。     
        我花了很多时间试图在计算机之间进行UDP广播和多播。希望这会使其他人更轻松,因为在网上很难找到该主题的答案。这些解决方案在Node 0.12.5中工作: UDP广播 计算广播地址 广播地址=(〜子网掩码)| (主机的IP地址)-请参阅Wikipedia。使用
ipconfig
(Windows)或
ifconfig
(Linux),或检出netmask模块。 服务器(记住将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组播地址空间注册表并在RFC 2365手册的第6部分中进行更深入的说明,我们发现适当的本地范围组播地址为239.255.0.0/16和239.192.0.0/14(也就是说,除非获得许可)使用其他的)。 下面的多播代码在具有这些地址的Linux(和许多其他平台)上可以正常工作。 Windows 8(显然还有Windows 7和其他可能的Windows)通过特定的接口发送和侦听多播,默认情况下,它通常会选择错误的接口,因此您永远不会在另一台计算机上接收多播(仅在本地主机上接收到多播)。 (花了我几个小时才能通过测试弄清楚这一点。)为了使代码可靠地工作,请更改代码,以便为要使用的接口指定主机的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 + \"\'\");
    });
}
客户
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);
});
    
        我认为从节点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();
    });
});
希望这对某人有帮助;)     

要回复问题请先登录注册