【发布时间】:2017-10-11 21:34:54
【问题描述】:
我一直在尝试在 NodeMCU 平台上的 TCP 模块上安装自定义协议。但是,我尝试嵌入 TCP 数据段的协议是二进制的,而不是基于 ASCII 的(例如 HTTP),所以有时它包含一个 NULL 字符(字节 0x00)结束 TCP 模块实现中的 C 字符串,导致数据包内的部分消息丢失。
-- server listens on 80, if data received, print data to console and send "hello world" back to caller
-- 30s time out for a inactive client
sv = net.createServer(net.TCP, 30)
function receiver(sck, data)
print(data)
sck:close()
end
if sv then
sv:listen(80, function(conn)
conn:on("receive", receiver)
conn:send("hello world")
end)
end
*这是一个简单的例子,正如你所见,'receiver' 变量是一个回调函数,它打印监听器检索到的 TCP 段中的数据。
如何解决这个问题?有没有办法使用 NodeMCU 库来规避这个问题?还是我必须实现另一个 TCP 模块或修改当前的实现以支持数组或表作为返回值而不是使用字符串?
欢迎提出任何建议。
【问题讨论】:
-
您是否检查过数据是否真的被截断了?我怀疑,只有 print() 方法会在 0 字节处停止。尝试打印数据的长度看看,如果输入的时候已经被截断然后回调。
-
Lua 本身对嵌入 NULL 的字符串没有问题。
print应该可以很好地处理它们。你可以用print(#data)查看data的长度。