Lua 实现 client-server 聊天

服务端程序

local socket = require("socket")
local server = socket.try(socket.bind("*", 1234))
local ip, port = server:getsockname()
while 1 do
    local client = server:accept()
    client:settimeout(10)
    local line, err = client:receive()
    print (line)
    print("请输入信息:")
    if not err then client:send(io.read().."\n")  end
    client:close()
end

客户端程序

local host, port = "*", 1234
local socket = require("socket")
local tcp = assert(socket.tcp())
tcp:connect(host, port);
tcp:send("已建立连接\n");
while 1 do
    local s, status, partial = tcp:receive()
    print(s or partial)
    print("请输入信息:")
    tcp:send(io.read().."\n");
    if status == "closed" then break end
end
tcp:close()

服务端程序可以向客户端发送消息,但是客户端无法向服务端发送消息。有办法解决吗?

点赞
用户1687505
用户1687505

我没有足够的声望来评论,但在10秒钟或服务器发送消息之后,无论哪个先到,服务器都会关闭连接。客户端在服务器发送消息之后才会尝试发送消息,而你编写的代码方式在此时服务器立即关闭连接。如果你想让这两个进行通信,最好在循环之外接受客户端,像这样:

服务器程序

local socket = require("socket")
local server = socket.try(socket.bind("*", 1234))
local ip, port = server:getsockname()
local client = server:accept()
client:settimeout(10)
while 1 do
    local line, err = client:receive()
    print (line)
    print("Enter input:")
    if not err then client:send(io.read().."\n")  end
end
client:close()

现在,这带来了一个问题,即服务器缺乏代码来意识到客户端已断开连接并需要找到新的客户端,但是实现起来并不难。

2017-02-09 22:31:06