LuaSocket TCP 客户端可以从服务器接收消息,但反之则不行

连接后,我的客户端可以正常接收服务器的每一条消息,但服务器的输出信息总是这样的:

客户端#1连接。
第一个数据包错误:超时
循环客户端#1
消息错误:超时
循环客户端#1
消息错误:超时
循环客户端#1
消息错误:超时
...etc...

我尝试在两边改变一些值。通常情况下不起作用,但有时当改变服务器超时值时,使服务器永远在client:send()或client:receive()上挂起。我从未让它们可以互相交换消息。为什么?

我的目标是让客户端和服务器每个循环都花费尽可能少的时间(<2-3ms),以便我可以在客户端或服务器上执行其他任务(这是一个更大的程序的一部分,但我将其用于更容易测试问题)。 我负担不起长时间的阻塞调用,因此我将超时设置得非常低。

服务器源代码:

socket = require("socket");
server = assert(socket.bind("*", 534));
ip, port = server:getsockname();
server:settimeout(0.03);

nClients = 0;
clients = {};

print("服务器启动。");

while true do
    local client, err = server:accept();

    if (not err) then
        nClients = nClients + 1;
        print("客户端#"..nClients.."已连接。");

        clients[nClients] = client;
        clients[nClients]:settimeout(0.03);
        clients[nClients]:send("测试");

        local msg, err = clients[nClients]:receive();
        if (not err) then
            print("我们有它");
        else
            print("第一个数据包错误:"..err);
        end
    end

    for i=1,nClients do
        if (clients[i] ~= nil) then
            print("循环客户端#"..i);

            local msg, err = clients[i]:receive();
            if (not err) then
                print("消息已接收:"..msg);
            else
                print("消息错误:"..err);
            end

            clients[nClients]:send("另一条消息");
        end
    end

    socket.sleep(0.01);
end

客户端源代码:

socket = require("socket");
tcp = assert(socket.tcp());
ip, port = "127.0.0.1", 534;

print("客户端启动。");

tcp:settimeout(0.03);

tcp:connect(ip, port);

while true do
    local a, b, msg = tcp:receive();

    if (msg and #msg > 1) then
        print("消息已接收:"..msg);
    end

    tcp:send("消息");

    socket.sleep(0.01);
end
点赞