【问题标题】:lua socket receive reports same data multiple timeslua socket 多次接收报告相同的数据
【发布时间】:2013-08-28 08:07:09
【问题描述】:

我有以下代码位于循环内(简化)。 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 在这里不为空。这里发生了什么?为什么我一遍又一遍地收到同样的东西?

【问题讨论】:

  • 也许您收到了一个不可打印的字符(或开头的 0)?你测试过零件的尺寸吗?也许字符串是空的?

标签: sockets lua luasocket


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    LuaSocket 参考文档说:

    "如果发生错误,该方法会返回 nil 后跟一条错误消息,该消息可以是字符串 'close' [...] 或字符串 'timeout',以防在运行期间超时操作。另外,在错误信息之后,函数返回传输的部分结果。"

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


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

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

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 1970-01-01
      • 2018-05-31
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 2021-08-31
      • 2014-08-11
      相关资源
      最近更新 更多