sockets - lua脚本-套接字连接断开时的结束循环

标签 sockets while-loop server lua client

我有一个小的Lua脚本,它运行一个套接字(服务器)。
当客户端连接到服务器套接字时,他可以发送多条消息。

现在的问题是..
为了能够随时接收来自客户端的消息,我在代码中放入了while循环。
但是,当客户由于互联网问题而断开连接,而他尝试重新连接时,我们会得到一个新的连接,但是如果我们发送一些东西,我们将一无所获。

我认为这是因为当我们与第一个客户建立联系时,他已经陷入困境。

现在我的问题是,有没有一种方法可以对脚本进行编程,以便脚本知道客户端已断开连接,而当客户端断开连接时,while循环将停止。

thx的帮助!

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

最佳答案

您可以通过采用第二个值来检测发送和接收调用中的关闭错误。然后,您可以检查第二个值是否已关闭并退出循环。

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

关于sockets - lua脚本-套接字连接断开时的结束循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53830692/

相关文章:

java - 在Java中将.wav文件读取到字节数组

api - 如何测试Berkeley套接字(BSD)API?

java - 如何创建一个从 ArrayList 的一行到另一行拆分每一行的循环?

java - 在 "x"家庭中生 child

c - 从socket读取到buffer,再从buffer逐行读取实现http语言

java - 聊天:向服务器上的所有客户端发送消息

php - Composer :在phpseclib SSH2中找不到命令

c++ - imap 客户端 - 如何编写正确的请求?

python - TCP 服务器/客户端 : [Errno 32] Broken pipe

c++ - 我不明白为什么 map 会导致段错误