Networking Lua中的客户机-服务器聊天

Networking Lua中的客户机-服务器聊天,networking,tcp,lua,Networking,Tcp,Lua,服务器程序 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 (l

服务器程序

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("Enter input:")
    if not err then client:send(io.read().."\n")  end
    client:close()
end  
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()
客户端程序

local host, port = "*", 1234
local socket = require("socket")
local tcp = assert(socket.tcp())
tcp:connect(host, port);
tcp:send("Connection Established\n");
while 1 do
    local s, status, partial = tcp:receive()
    print(s or partial)
    print("Enter input:")
    tcp:send(io.read().."\n");
    if status == "closed" then break end 
end
tcp:close()

服务器程序可以向客户端发送消息,但客户端无法向服务器发送消息。有什么方法可以做到这一点吗?。

我没有足够的声誉发表评论,但在10秒钟后或服务器发送消息后(以先到者为准),服务器会关闭连接。在服务器发送消息之前,客户端不会尝试发送消息,并且按照您编写代码的方式,服务器会立即在此时关闭连接。如果您想让两者交流,最好在循环之外接受客户机,如下所示:

服务器程序

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("Enter input:")
    if not err then client:send(io.read().."\n")  end
    client:close()
end  
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()

现在,这就带来了一个问题,即服务器缺少代码来实现客户端已断开连接,需要找到新的客户端,但是实现起来应该不会那么困难。

tcp:connecthost,port;要求主机不为*。可能是您在连接后10秒内未发送数据?您能详细说明到底发生了什么吗?我看到服务器只有在从服务器接收到一些数据时才能发送任何内容?客户端首先在建立连接时发送消息,然后服务器才能向客户端发送消息。在此之后,不再进行消息传输。客户端和服务器有没有办法持续聊天?我已将超时时间更改为1000,但它仍然不工作。感谢它的工作,但客户端发送给服务器的消息只有在服务器向客户端发送内容后才会显示,即聊天顺序不正确