lua socket接收多次报告相同的数据

时间:2013-05-09 10:41:28

标签: sockets lua luasocket

我有以下代码,它位于循环内(简化)。 cscc是连接到localhost上的服务器的客户端套接字。我的服务器向客户端发送一个字符。但是,我似乎没有正确接收它。协议是TCP。

    rect, _, st = socket.select({cscc}, nil, .5)

    if(rect[cscc] ~= nil) then
        data, err, part = csc:receive(512)
        if(part ~= nil) then
            print(err.." : "..part)
        end
        socket.sleep(1)
    end

当从服务器发送字符时,我将以下行重复输出:

timeout :

显然,part在这里不是null。这里发生了什么?为什么我一遍又一遍地接受同样的事情?

2 个答案:

答案 0 :(得分:2)

也许服务器根本不需要真正发送任何数据。检查part是否为空,看看如果未将第三个参数传递给socket.select会发生什么。

答案 1 :(得分:0)

LuaSocket参考文档说:

  

“如果出现错误,该方法返回nil后跟一条错误消息,该消息可以是字符串'closed'[...]或字符串'timeout',以防超时在错误消息之后,该函数返回传输的部分结果。“

空字符串将被视为“部分结果”。


尝试对(part and #part > 0)进行测试,这将检查该部分是否为非nil,然后检查它是否实际包含任何字节。

使用netcat或类似内容进行检查也是值得的,以确保您的服务器实际上是在发送您期望的数据。