我想向连接到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:connect(80, "255.255.255.255")
,但未发送任何内容
问题:-
我以前使用的每个srv
都会覆盖前一个srv
,因此即使延迟,我也无法获得响应,即使我可以用不同的名称命名每个srv
srv_1
,srv_2
,srv_3
,但这会占用太多内存。
我想要的
仅创建一个连接?
答案 0 :(得分:1)
您的代码使用的是TCP,它本质上是一个单连接的点对点协议。没有所谓的“广播” TCP连接。 TCP根本无法使用广播工作。就像试图将汽车当作船来使用。
如果要发送少量信息,则可以尝试使用UDP。缺点是UDP不可靠-无法确定已收到消息-如果需要,您将需要更多代码来接收响应,并且需要建立可靠性机制(重新传输)如果没有收到答案,请检查重传,以防万一答案丢失了。
我建议您签出MQTT协议-它旨在简化与多个客户端的通信。它是轻量级的,并且MQTT客户端在NodeMCU和Arduino处理器上运行良好。有an MQTT client built into NodeMCU's LUA implementation。
缺点是您需要一个所有NodeMCU都将连接到的MQTT代理。尽管https://io.adafruit.com/,代理通常在更强大的处理器(Raspberry Pi是一个不错的选择)上运行,或者在Internet外部(Adafruit在there are some implementations that run on an ESP8266提供代理)上运行,尽管{{3}}。