使用udp协议需要服务器监听吗,Nodemcu:如果有/不是udp监听器,UDP通信会受到影响吗?...

我在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? –

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值