NodeMCU尝试调用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')_行。

这里正在发生什么?因为很多其他人使用Arduino-IDE版本(顺便问一下,那仍然是nodemcu还是需要不同的ESP8266固件?),所以没有太多的谷歌结果。我正在获取广播IP,并连接到AP。我没有在这里发布wifi连接部分,因为它可以用于测试mqtt和http连接,这些连接都起作用。

我使用的构建是Lua 5.1.4 on SDK 2.1.0(116b762),其中包含_net_模块。

点赞
用户131929
用户131929

你所有的尝试都失败了,因为你似乎没有考虑到 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

2017-07-01 19:39:52