首页 文章

NodeMCU TCP连接超时

提问于
浏览
0

我正在尝试使用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 回答

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

    125 us回调代码:

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

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

    未来事件“套接字连接”将来会触发conn:on()的回调 .

相关问题