Lua NodeMCU web服务器连接错误(正在使用的地址堆栈回溯)

Lua NodeMCU web服务器连接错误(正在使用的地址堆栈回溯),lua,webserver,esp8266,nodemcu,Lua,Webserver,Esp8266,Nodemcu,我想使用NodeMCU打开和关闭web服务器上的led,但每次编译时都会发生相同的错误。我是初学者,所以我需要一些帮助。我相信这个错误与函数listen()有关。可能是因为我更改了DNS,端口80无法使用 错误: dofile("ConectarRedeWireless.lua"); 192.168.137.57 255.255.255.0 192.168.137.1 ConectarRedeWireless.lua:13: address in use stack trac

我想使用NodeMCU打开和关闭web服务器上的led,但每次编译时都会发生相同的错误。我是初学者,所以我需要一些帮助。我相信这个错误与函数listen()有关。可能是因为我更改了DNS,端口80无法使用

错误:

 dofile("ConectarRedeWireless.lua");
  192.168.137.57    255.255.255.0   192.168.137.1
 ConectarRedeWireless.lua:13: address in use
 stack traceback:
 [C]: in function 'listen'
 ConectarRedeWireless.lua:13: in main chunk
 [C]: in function 'dofile'
    stdin:1: in main chunk
代码:

——科内索无线网络
wifi.setmode(wifi.STATION)
wifi.sta.config(“goncalo”,“936674888”)
打印(wifi.sta.getip())
--迪尼科斯多皮诺发光二极管
led1=1
gpio.mode(led1,gpio.OUTPUT)
--定义Web服务器
srv=net.createServer(net.TCP)
srv:监听(80,功能(连接)
连接:打开(“接收”,功能(客户端,请求)
本地buf=“”;
local u,u,method,path,vars=string.find(请求,“([A-Z]+)(.+)?(.+)HTTP”);
如果(方法==nil),则
_,方法,路径=string.find(请求,([A-Z]+)(.+)HTTP”);
结束
本地_GET={}
如果(vars~=nil),则
对于string.gmatch(vars,(%w+)=(%w+&*)do中的k,v
_获取[k]=v
结束
结束
buf=buf.“FILIPEFLOP”;
buf=buf.“ESP8266 Web服务器”;
buf=buf.“

”; 本地_on,_off=“”,“” 如果(_GET.pin==“LIGA1”),则 gpio.write(led1,gpio.HIGH); elseif(_GET.pin==“DESLIGA1”)则 gpio.write(led1,gpio.LOW); 结束 客户:发送(buf); 客户端:close(); 收集垃圾(); (完) (完)
首先,我建议您使用正确的初始化顺序,在设置服务器之前,等待设备完全连接到WiFi。我们保持联系

srv:listen(80,function(conn)
只能为任何给定端口调用一次,因为不能在同一端口上侦听多个服务器套接字。这就是为什么您会得到

正在使用的地址

错误。我们的演示了如何在侦听之前检查
srv
是否可用。您可以通过在再次侦听之前先运行
srv:close()
来扩展此功能。类似如下:

sv = net.createServer(net.TCP, 30)
if sv then
  sv:close()
  sv:listen(80, function(conn)
    -- do something
  end)
end

顺便说一句,你是从哪里得到这个代码样本的?我在这里已经在堆栈溢出上见过好几次了,但是它有更多的缺陷需要纠正。

这个问题解决了吗?你需要更多的反馈吗?
sv = net.createServer(net.TCP, 30)
if sv then
  sv:close()
  sv:listen(80, function(conn)
    -- do something
  end)
end