lua script - завершить цикл при разрыве сокетного соединения - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть небольшой скрипт Lua, который запускает сокет (сервер).когда клиент подключается к сокету сервера, он может отправлять несколько сообщений.

Теперь проблема в том, что. Чтобы иметь возможность получать сообщения от клиента в любое время, я поместил цикл while в свой код.Но когда клиент отключается из-за проблем с интернетом, и он пытается восстановить соединение, мы получаем новое соединение, но если мы отправляем что-то, мы ничего не получаем обратно.

Я думаю, что это потому, что он уже в своем цикле, когдамы подключились к первому клиенту.

Теперь мой вопрос: есть ли способ, которым я могу запрограммировать сценарий так, чтобы сценарий знал, что клиент был отключен, а когда он отключен, цикл while останавливается.

спасибо за помощь!

socket = require("socket")
server = assert(socket.bind("*",9667))
tcp = assert(socket.tcp())


client = assert(server:accept())
keep = client:setoption("keepalive",true)
time = client:settimeout(1)
client:send("connection ok\n")


while true do 
  message = client:receive()

  -- if we get a 'off' message from the client --
if (message == "off") then
    client:send("off\n");


end

  -- if we get a 'on' message from the client --
if (message == "on") then
  grp.write('0/2/1',true)
    client:send(" on\n");


end
  log(message)
end

1 Ответ

0 голосов
/ 18 декабря 2018

Вы можете обнаружить закрытую ошибку при отправке и получении вызовов, приняв второе значение.Затем вы можете проверить, что второе значение закрыто и выйти из цикла.

socket = require("socket")
server = assert(socket.bind("*",9667))
tcp = assert(socket.tcp())


client = assert(server:accept())
keep = client:setoption("keepalive",true)
time = client:settimeout(1)
client:send("connection ok\n")


while true do
    message, err = client:receive()

    -- if we get a 'off' message from the client --
    if (message == "off") then
        _, err = client:send("off\n")
    end

    -- if we get a 'on' message from the client --
    if (message == "on") then
        grp.write('0/2/1',true)
        _, err = client:send(" on\n")
    end

    if err == "closed" then
        break
    end

    log(message)
end
...