L
Size: a a a
S
local t = setmetatable({}, {__index = table})
И будет работать.local arrmt = {__index = table}
function array(t)
return setmetatable(t or {}, arrmt)
end
Тогда будешь мутить всякие массивы с arr:insert()
/arr:remove()
.m
S
function table.hlen(tbl)
local i. k = 0, next(tbl)
while k do
i = i + 1
k = next(tbl, k)
end
return i
end
AG
local socket = require("socket")
local host = hostIP
local port = 23
local tcp = assert(socket.tcp())
tcp:connect(host, port)
---
while tcp do
local res, err = tcp:receive()
dosomething(res, err)
local command = GetComm()
tcp:send(command..'\r\n')
end
ШТ
AG
...
tcp:connect(host, port)
tcp:settimeout(5)
...
S
tcp:receive()
без аргументов ждёт разрыва соединения. Чтобы принять строку с разделителем \r\n
— используй tcp:receive("*l")
.S
tcp:receive()
, когда что-то придёт — оно тебе обязательно скажет, и в цикле ты можешь делать что-то ещё помимо сетевого соединения.S
err
при receive
, если оно прекращено — напишет не timeout
а closed
.AG
S
local socket = require("socket")
local host = hostIP
local port = 23
local tcp = assert(socket.tcp())
tcp:settimeout(0)
local status = tcp:connect(host, port)
---
while status ~= 'closed' do
-- команды telnet однострочные,
-- поэтому "*l", т.е. line
local data
data, status = tcp:receive("*l")
if data then
dosomething(data, status)
end
local command = GetComm()
if command then
tcp:send(command..'\r\n')
end
socket.sleep(0.03)
end
AG