我在ESP8266上有一个奇怪的问题,使用nodemcu固件(2.1.0),在那里我没有任何想法可以尝试解决这个问题。Nodemcu:如果有/不是udp监听器,UDP通信会受到影响吗?
我有一个简单的lua脚本正在运行,它正在侦听UDP命令以开启和关闭中继,并且每隔60秒通过UDP发送活动消息到指定的IP地址。
如果在服务器端没有听到应该得到UDP“活动”消息的东西,ESP反应良好,都很好。 只要我启动netcat来收听来自ESP的UDP包,ESP就会每隔几分钟开始挂起至少30-60秒。 这是特别令人困惑,因为我期待UDP是一个无连接协议。那么UDP上的听众如何影响发送者的行为呢? 这些是LUA脚本的相关部分:
[...]
alive=60000
[...]
function srvupd(s)
if (connected==1) then
s = s .." "..ip
srv:send(serverport, serveradr, s.."\n")
end;
end;
if (alive>0) then
tmr.alarm(2, alive, 1, function()
srvupd("alive")
end)
end
srv=net.createUDPSocket()
srv:listen(80)
srv:on("sent", function()
srv:close();
srv:listen(80);
end)
srv:on("receive",function(client,request, port, ip)
if (alive>0) then tmr.stop(2) end
print(string.format("received '%s' from %s:%d", request, ip, port))
buf="unknown"
if (request == "ch1on") then gpio.write(relay1, relayon);buf="ok" end
[...]
client:send(port, ip, buf)
if (alive>0) then tmr.start(2) end
end)
这就是我如何使用netcat来聆听来自ESP在bash脚本的UDP消息:
#!/bin/bash
while true
do
msg=$(netcat -4 -u -n -l -D 192.168.0.5 2701 -w0 -q0)
echo -e "$msg"
done
在情况ESP不再对UDP命令作出反应,活着的消息仍然每分钟发送一次。 UDP命令甚至可以被ESP接收,因为只要处理继续,一段时间之前发送的“通道开启”命令就会被执行。
ESP的这些临时阻塞仅在我侦听其UDP消息时才会发生。 我已经检查过所有类型的组合,例如监听器的独立UDP套接字和ESP上的活动发送,关闭并打开服务器,发送消息后(如上面的当前版本)等。 甚至试图通过TCP接收命令,只通过UDP发送活动消息。 行为保持不变。所有的工作,只要没有收到来自ESP的UDP消息。只要我启动netcat,ESP就会在几分钟内开始挂起。
任何想法?因为它是UDP,所以很难理解它是如何发生的。
亲切的问候 Tjareson
2017-06-13
Tjareson
+0
您是否尝试过像Wireshark这样的其他工具来查看它是否仅仅是您的bash脚本而不是导致问题的ESP? –