如何向局域网中的 Node.JS 服务器发送广播请求?

How Do I Send a Broadcast Request to a Node.JS server On My LAN?

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

问题是,我希望能够动态找到 IP 地址(我不想做静态 IP。我想把这些发给一些家庭,我希望他们 "just work" 一旦我加入他们的 wifi)。

我想要做的是拥有一个可以在网络上找到 Raspberry Pi 的 phone 应用程序。我在想这个,我记得读过有关局域网广播 IP 地址的文章。我以前从未使用过它们,但似乎正是我所需要的。该应用程序将启动,在广播中发送一条特制消息,上面写着 "Where's the Raspberry Pi?",Pi 会回答 "Here I am! I'm at X address!"

我以前从未尝试过使用广播 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);
});

然后从我的 PC,curl 192.168.1.XXX:8081(已知的 IP 地址)和 boom。预期的响应。

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

根据我在网上看到的,应该是广播地址。我的路由器可能会阻止它吗?我只是在做一些根本性的错误吗?

提前致谢。 :)

你做的事情根本就错了:)

您不能改为使用 TCP/HTTP(参见 Can I use broadcast or multicast for TCP?) but you could send an UDP datagram (see Send Broadcast datagram)发送广播消息。如果您的路由器不过滤那种流量,它应该可以工作。

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

的 IP