如何向我的LAN上的Node.JS服务器发送广播请求?

时间:2017-03-04 19:14:52

标签: node.js ip lan

我有一个Raspberry Pi连接到RGB LED灯条。在Pi上,是一个托管网页的Node.JS服务器,该网页允许我为LED条带选择一种颜色。一切正常。

问题是,我希望能够动态找到IP地址(我不想做静态IP。我想把它们交给某个家庭,我希望他们能够#34;只是工作"一旦我加入他们的wifi)。

我想要的是拥有一个可以在网络上找到Raspberry Pi的手机应用程序。我正在考虑这个,我记得读过有关LAN的广播IP地址。我之前从未使用它们,但似乎是我需要的。该应用程序将启动,在广播上发送一条特制的消息,其中显示" Raspberry Pi在哪里?"而Pi会回答#34;我来了!我在X地址!"

我之前从未尝试过使用广播IP地址,所以我决定尝试一个概念验证。我在我的Pi上启动了一个Node.JS服务器,如下所示:

var http = require('http');

var port = 8081;

var server = http.createServer(function(request, response) {
    response.writeHead(200);
    response.end("Pong");
});
server.listen(port, function() {
    console.log((new Date()) + ' Server is listening on port ' + port);
});

然后从我的电脑,curl 192.168.1.XXX:8081(已知的IP地址)和繁荣。预期的回应。

curl 192.168.1.255:8081给我一个502错误。

从我在线阅读的内容来看,应该是广播地址。我的路由器可能会阻止这个吗?我只是做了一些根本错误的事情吗?

提前致谢。 :)

1 个答案:

答案 0 :(得分:1)

你做了一些根本错误的事情:)

您无法使用TCP / HTTP发送广播消息(请参阅Can I use broadcast or multicast for TCP?),但您可以发送UDP数据报(请参阅Send Broadcast datagram)。如果你的路由器没有过滤那种流量,它应该可以工作。

许多操作系统都附带了一个名为arp-scan的工具。您可以依赖ARP(地址解析协议)并使用此工具列出网络上的IP-MAC关联。您可以简单地使用属于Raspberry Pi的IP。