1

我有以下代码位于循环内(简化)。cscc是连接到本地主机上的服务器的客户端套接字。我的服务器向客户端发送一个字符。但是,我似乎没有正确接收它。协议是 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 在这里不为空。这里发生了什么?为什么我一遍又一遍地收到同样的东西?

4

2 回答 2

2

也许服务器根本没有真正发送任何数据。检查是否part为非空,看看如果不将第三个参数传递给socket.select.

于 2013-05-09T22:54:28.550 回答
0

LuaSocket 参考文档说:

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

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


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

也可能值得检查netcat或类似检查以确保您的服务器实际上正在发送您期望的数据。

于 2013-08-28T00:07:09.663 回答