NodeMCU TCP连接超时

时间:2016-12-07 18:02:14

标签: esp8266 nodemcu

我正在试用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是事件驱动的,并且对连接的调用是在逻辑处理“连接”后进行的。 (此时我发送了一些东西)。我对此表示满意,但我想知道我们何时以及何时离开了foo'。

另一件事是,我该如何实现超时呢?我希望超时并在发生时退出。

感谢您的任何提示。

1 个答案:

答案 0 :(得分:1)

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

当使用foo()

在另一个代码中调用此函数时,将执行此代码

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

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

创建(在当前)套接字并将其分配给变量conn。从那时起,康纳就是那个人。

然后,

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套接字实现连接并触发回调函数

125 us回调代码:

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

与"另一个代码"

并行执行

未来事件" socket连接"在将来,使用conn:on()

激活回调