仅读取几个字符串后 TCP 连接崩溃
TCP connection crashes after reading only a few strings
我正在使用 NodeMCU 在 LUA 中对 ESP8266 wifi 模块进行编程。我能够从 iPhone 应用程序连接到由 wifi 模块创建的 TCP 服务器以发送 3 个浮点数。我将巨大的字符串解析为 3 个字符串,并使用 uart 将它们发送到 Arduino。它工作得很好,但在输入大约 10 次后 crashes/freezes。我需要源源不断的数据流不断涌现,但我无法可靠地做到这一点。
我在每一行之后打印以跟踪实际发生的事情,即使在那之后我仍然不确定发生了什么。
代码
`
print("11\n")
wifi.setmode(wifi.STATION)
print("22\n")
wifi.sta.config("WDTS03","Walker14!")
print("33\n")
elWiFi =(wifi.sta.getip())
if elWiFi ~= nil then
print(wifi.sta.getip())
end
print("44\n")
if srv~=nil then
print("444\n")
srv:close()
print("555 \n")
end
print("Create server \n")
srv=net.createServer(net.TCP)
print("1\n")
if srv ~= nil then
print("srv !=nil \n")
srv:listen(6969,function(conn)
print("listening \n")
if conn ~= nil then
print("incoming\n")
conn:on("receive",function(conn,numbers)
print("2\n")
print(#numbers)
print("chekcing for nil \n")
if numbers ~= nil then
print("3\n")
p = string.find(numbers, "x=")
print("4\n")
q = string.find(numbers, "&y")
print("5\n")
if p ~= nill then
print("6\n")
if q ~= nil then
print("7\n")
x = (string.sub(numbers,p+2, q-1))
print("x=" .. x)
end
end --p ~= nill
print("8\n")
p = string.find(numbers, "y=")
print("9\n")
q = string.find(numbers, "&z")
print("10\n")
if p ~= nill then
print("11\n")
if q ~= nil then
print("12\n")
y = (string.sub(numbers,p+2, q-1))
print("y=" .. y)
end
end --p ~= nill
print("13\n")
p = string.find(numbers, "z=")
print("14\n")
q = string.find(numbers, " H")
print("15\n")
if p ~= nill then
print("16\n")
if q ~= nil then
print("17\n")
z = (string.sub(numbers,p+2, q-1))
print("z=" .. z)
end
end-- p ~= nill
print("18\n")
end --numbers ~= nil
print("54\n")
--conn:send("test\n")
end)
print("55 \n")
end
print("66 \n")
end)
print("77\n")
end
print("666\n")`
我得到以下输出
11
22
33
44
Create server
1
srv !=nil
77
666
> listening
incoming
55
66
listening
incoming
55
66
listening
incoming
55
66
listening
incoming
55
66
2
338
chekcing for nil
3
4
5
6
7
x=0.1722259521484375
8
9
10
11
12
y=-0.7733306884765625
13
14
15
16
17
z=-0.5716094970703125
18
54
2
337
chekcing for nil
3
4
5
6
7
.
.--repeats a few times
.
y=-0.005340576171875
13
14
15
16
17
z=-0.9838409423828125
18
54
PANIC: unprotected error in call to Lua API (attempt to call a nil value)
�l� �=+���T2n���
NodeMCU 0.9.6 build 20150704 powered by Lua 5.1.4
11
22`
在 "srv:listen" 的 "conn:on" 参数上失败了几次
感谢您的帮助,如果格式有误,我们深表歉意。第一次
评论太长,抱歉。
PANIC: unprotected error in call to Lua API (attempt to call a nil value)
很难说出哪个值是 nil/null。创建一个 Minimal, Complete, and Verifiable Example (MCVE) 以减少需要分析的代码量。
以下代码段最终将由于关闭的上值而导致内存不足。您的每个回调函数都应使用其自己的传递套接字实例副本,而不是引用包装回调函数之一。第三行不应重新使用 conn
变量,而应使用新名称定义一个。
有关详细信息,请参阅 。
srv:listen(6969,function(conn)
if conn ~= nil then
conn:on("receive",function(conn,numbers)
NodeMCU 0.9.6 build 20150704
不要使用那些旧的 0.9.x 二进制文件,它们已经过时并且包含很多错误。 http://nodemcu.readthedocs.io/en/latest/en/#getting-started 帮助您开始使用新固件。
我正在使用 NodeMCU 在 LUA 中对 ESP8266 wifi 模块进行编程。我能够从 iPhone 应用程序连接到由 wifi 模块创建的 TCP 服务器以发送 3 个浮点数。我将巨大的字符串解析为 3 个字符串,并使用 uart 将它们发送到 Arduino。它工作得很好,但在输入大约 10 次后 crashes/freezes。我需要源源不断的数据流不断涌现,但我无法可靠地做到这一点。 我在每一行之后打印以跟踪实际发生的事情,即使在那之后我仍然不确定发生了什么。
代码 `
print("11\n")
wifi.setmode(wifi.STATION)
print("22\n")
wifi.sta.config("WDTS03","Walker14!")
print("33\n")
elWiFi =(wifi.sta.getip())
if elWiFi ~= nil then
print(wifi.sta.getip())
end
print("44\n")
if srv~=nil then
print("444\n")
srv:close()
print("555 \n")
end
print("Create server \n")
srv=net.createServer(net.TCP)
print("1\n")
if srv ~= nil then
print("srv !=nil \n")
srv:listen(6969,function(conn)
print("listening \n")
if conn ~= nil then
print("incoming\n")
conn:on("receive",function(conn,numbers)
print("2\n")
print(#numbers)
print("chekcing for nil \n")
if numbers ~= nil then
print("3\n")
p = string.find(numbers, "x=")
print("4\n")
q = string.find(numbers, "&y")
print("5\n")
if p ~= nill then
print("6\n")
if q ~= nil then
print("7\n")
x = (string.sub(numbers,p+2, q-1))
print("x=" .. x)
end
end --p ~= nill
print("8\n")
p = string.find(numbers, "y=")
print("9\n")
q = string.find(numbers, "&z")
print("10\n")
if p ~= nill then
print("11\n")
if q ~= nil then
print("12\n")
y = (string.sub(numbers,p+2, q-1))
print("y=" .. y)
end
end --p ~= nill
print("13\n")
p = string.find(numbers, "z=")
print("14\n")
q = string.find(numbers, " H")
print("15\n")
if p ~= nill then
print("16\n")
if q ~= nil then
print("17\n")
z = (string.sub(numbers,p+2, q-1))
print("z=" .. z)
end
end-- p ~= nill
print("18\n")
end --numbers ~= nil
print("54\n")
--conn:send("test\n")
end)
print("55 \n")
end
print("66 \n")
end)
print("77\n")
end
print("666\n")`
我得到以下输出
11
22
33
44
Create server
1
srv !=nil
77
666
> listening
incoming
55
66
listening
incoming
55
66
listening
incoming
55
66
listening
incoming
55
66
2
338
chekcing for nil
3
4
5
6
7
x=0.1722259521484375
8
9
10
11
12
y=-0.7733306884765625
13
14
15
16
17
z=-0.5716094970703125
18
54
2
337
chekcing for nil
3
4
5
6
7
.
.--repeats a few times
.
y=-0.005340576171875
13
14
15
16
17
z=-0.9838409423828125
18
54
PANIC: unprotected error in call to Lua API (attempt to call a nil value)
�l� �=+���T2n���
NodeMCU 0.9.6 build 20150704 powered by Lua 5.1.4
11
22`
在 "srv:listen" 的 "conn:on" 参数上失败了几次
感谢您的帮助,如果格式有误,我们深表歉意。第一次
评论太长,抱歉。
PANIC: unprotected error in call to Lua API (attempt to call a nil value)
很难说出哪个值是 nil/null。创建一个 Minimal, Complete, and Verifiable Example (MCVE) 以减少需要分析的代码量。
以下代码段最终将由于关闭的上值而导致内存不足。您的每个回调函数都应使用其自己的传递套接字实例副本,而不是引用包装回调函数之一。第三行不应重新使用 conn
变量,而应使用新名称定义一个。
有关详细信息,请参阅
srv:listen(6969,function(conn)
if conn ~= nil then
conn:on("receive",function(conn,numbers)
NodeMCU 0.9.6 build 20150704
不要使用那些旧的 0.9.x 二进制文件,它们已经过时并且包含很多错误。 http://nodemcu.readthedocs.io/en/latest/en/#getting-started 帮助您开始使用新固件。