我有一个运行套接字(服务器)的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
答案 0 :(得分:1)
您可以通过取第二个值来检测发送和接收呼叫中的关闭错误。然后,您可以检查第二个值是否已关闭并退出循环。
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