【问题标题】:NodeMCU TCP connection timeoutNodeMCU TCP 连接超时
【发布时间】:2016-12-12 23:51:30
【问题描述】:

我正在试用 Elecrow ESP8266 并使用 NodeMCU 固件 (nodemcu_integer_0.9.6-dev_20150704.bin)。我的连接代码如下所示:

function foo()
  conn = net.createConnection(net.TCP, 0)      
  conn:on("connection", function() 
    text = "some text\r\n"
    conn:send(text)
  end)
  conn:connect(5000,"192.168.240.1")
end

这是一个函数。我的第一个问题是我们什么时候退出这个函数?我必须明确有一个“退出”声明吗?我意识到 NodeMCU 是事件驱动的,并且调用 connect 是在处理“连接”的逻辑之后(此时我发送了一些东西)。我对此没意见,但我想知道我们如何以及何时摆脱“foo”。

另一件事是,我该如何实现超时?发生这种情况时,我想超时并退出。

感谢任何提示。

【问题讨论】:

  • 你为什么认为你没有退出foo()函数?
  • 0.9.6 也是旧的和有缺陷的。使用来自 nodemcu-build.com 的构建

标签: esp8266 nodemcu


【解决方案1】:

在这段代码中,在函数 foo() 和 end 之间,您正在定义函数 foo(),此时不执行它。

当这个函数在另一个带有 foo() 的代码中被调用时,这个代码将被执行

当你调用 foo() 并执行 foo() 代码时,当你调用 foo() 并执行 foo() 代码时,你首先

conn = net.createConnection(net.TCP, 0)

创建(目前)一个套接字并将其分配给变量 conn。从那一刻起,conn 就是 soket。

那么,

conn:on("connection", function() 
  text = "some text\r\n"
  conn:send(text)
end)

您分配一个回调函数,当套接字实现连接时,该函数将在(未来)事件中执行。

那么,

conn:connect(5000,"192.168.240.1")

你要求插件尝试连接,函数 foo() 的执行结束(并且 foo() 返回)

在想象的时间线上,事情可能会这样发展。

当解释器读取代码 [function foo() ... end] 时,函数 foo() 被定义,但没有被执行。

0us foo() foo() 代码开始执行,因为我们调用了 foo()

20us net.create... 套接字已创建

40us conn:on... 某些回调函数被分配给 de socket

60us conn:connect.. 套接字开始尝试连接

65 us foo()函数结束并返回,执行“另一段代码”

120 us socket实现连接并触发回调函数

125 us 回调代码:

text = "some text\r\n"
conn:send(text)

与“另一个代码”并行执行

未来事件“socket connected”在未来触发,回调分配,在当前,使用 conn:on()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 2016-11-15
    • 2011-10-04
    • 1970-01-01
    相关资源
    最近更新 更多