尝试调用 net.socket:connect() 时 NodeMCU 崩溃

NodeMCU crashes when attempting to call net.socket:connect()

我正在尝试向某个端口发送广播数据包,但代码似乎给出了一些我无法找到修复的奇怪错误。 我试过使用 net.socket:connect() 然后调用 "send()" 方法,但没有用,然后我说我应该使用 net.socket:on('connection') 和 send 那里,因为我想 net.socket:connect() 不是同步的。但这也给出了一个奇怪的错误...

对于此代码:

function sendBroadcastPacket()
    bip = wifi.sta.getbroadcast()
    srv = net.createConnection(net.UDP,0)
    print('Trying to connect on: ', bip)
    srv:connect('9001', bip)
    srv:send("Broadcast packet from: "..NODE_ID, function(sent)
            print("Broadcasted packet! "..sent)
        end)
end

我收到以下错误:

PANIC: unprotected error in call to Lua API (init.lua:24: attempt to call method 'connect' (a nil value))

第 24 行是 srv:connect 行。

之后我尝试先监听连接事件,看看它是否有效:

function sendBroadcastPacket()
    bip = wifi.sta.getbroadcast()
    srv = net.createConnection(net.UDP,0)
    print('Trying to connect on: ', bip)
    srv:on('connection', function(sck, c)
        sck:send("Broadcast packet from: "..NODE_ID, function(sent)
            print("Broadcasted packet! "..sent)
        end)
    end)

    srv:connect('9001', bip)
end

我收到以下错误:

PANIC: unprotected error in call to Lua API (init.lua:24: invalid callback name)

第 24 行是 srv:on('connection') 行。

这里似乎发生了什么? google 结果不多,因为很多其他人使用 Arduino-IDE 版本(顺便说一句,它仍然是 nodemcu 还是您需要 ESP8266 的不同固件?)。 我得到一个广播 IP,它连接到 AP。我没有在此处 post wifi 连接部分,因为它有效,我用它来测试有效的 mqtt 和 http 连接。

我正在使用的版本,SDK 2.1.0(116b762) 上的 Lua 5.1.4,包含 net 模块。

你的尝试都失败了,因为你似乎没有考虑到 UDP 是一种无连接协议。因此,UDP 没有 connect()on('connection'...

第一次尝试失败,因为 send() 需要在套接字上调用,而不是在连接上调用。第二次失败,因为 connection 回调名称仅适用于 TCP,不适用于 UDP。

尝试这样的事情:

function sendBroadcastPacket()
  local port = 9001
  local bip = wifi.sta.getbroadcast()
  print(string.format("Broadcasting to %s:%d", bip, port))
  net.createUDPSocket():send(port, bip, "foo bar")
end

文档:https://nodemcu.readthedocs.io/en/latest/en/modules/net/#netudpsocket-module