Tcp NodeMCU向所有客户端广播

Tcp NodeMCU向所有客户端广播,tcp,lua,broadcast,esp8266,nodemcu,Tcp,Lua,Broadcast,Esp8266,Nodemcu,我想向连接到esp8266 12f接入点的所有客户端广播一个请求 我用它来为每个客户端创建一个连接,这意味着如果有3个客户端,它将创建3个连接 for mac,ip in pairs(wifi.ap.getclient()) do srv= net.createConnection(net.TCP, 0) srv:on("receive", function(client, b_response) srv:close() collectgarbage() end) srv:o

我想向连接到esp8266 12f接入点的所有客户端广播一个请求

我用它来为每个客户端创建一个连接,这意味着如果有3个客户端,它将创建3个连接

for mac,ip in pairs(wifi.ap.getclient()) do

   srv= net.createConnection(net.TCP, 0)
   srv:on("receive", function(client, b_response) srv:close() collectgarbage() end)
   srv:on("connection", function(client, b_request) client:send(request) end)
   srv:connect(80, ip)

end
我尝试了广播ip srv:connect80255.255.255.255,但没有发送任何内容

问题是:-

我使用的方法是,每个srv都将覆盖以前的srv,因此如果它被延迟,我无法获得响应,即使我可以使用不同的名称命名每个srv,如srv_1、srv_2、srv_3,但这会占用太多内存

我想要什么


只创建一个连接?

您的代码使用TCP,它本质上是一个单连接点对点协议。没有广播TCP连接。TCP使用广播根本不起作用。这就好像试图把汽车当作船一样

如果要发送少量信息,可以尝试UDP。缺点是UDP是不可靠的——你不能确定你的消息是否被接收到了——如果你想要一个响应,你需要更多的代码来接收响应,并且你需要建立一个可靠性机制——如果没有收到响应,就重传,如果你在意的话,在应答被丢弃的情况下检测重传

我建议您检查一下MQTT协议——它的设计使与多个客户机的通信变得容易。它是轻量级的,MQTT客户端在NodeMCU和Arduino处理器上运行良好。有一个

缺点是您需要一个所有NodeMCU都将连接到的MQTT代理。代理通常在一个功能更强的处理器上运行,Raspberry Pi是一个不错的选择,或者外部在互联网上运行,不过Adafruit提供了一个代理