尝试调用 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
我正在尝试向某个端口发送广播数据包,但代码似乎给出了一些我无法找到修复的奇怪错误。 我试过使用 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