Luasocket TCP 在收到 \r\n\r\n 后停止监听。

每当我使用以下内容接收TCP消息时:

local socket=require "socket"
local sv=socket.bind("*",1337)
function love.update(dt)
    local s=sv:accept()
    while true do
        local s,e=s:receive()
        print(e or s)
    end
end

它可以完美处理带有 \r\n 空格的 http headers,但是当我尝试向其发送 http POST 时,我可以获取头信息,但获取不到数据,而数据在一个空行之后 (\r\n\r\n)。 当我将其用作客户端时,也会出现相同的问题:

s.socket_write(h,"test1\r\ntest2\r\n\r\ntest3") -- (not luasocket)

我只能看到 test1 和 test2。

我尝试过使用 setOption 函数进行调试,但是没有效果。

有什么办法可以接收数据吗?

点赞
用户1150918
用户1150918

你试过填写socket.receive()的模式参数吗?[1]

不确定默认值是哪个,但你可能考虑使用socket.receive('*a'),然后稍后解析这些新行。

[1]http://w3.impa.br/~diego/software/luasocket/tcp.html#receive

2013-07-24 15:07:46
用户1442917
用户1442917

我不确定你期望得到什么,但默认的“模式”是仅读取一行,因为你的字符串 "test1\r\ntest2\r\n\r\ntest3" 在结尾没有换行符,所以 receive 函数会等待换行符。

通常,在读取头部后,你已经知道要读取的内容长度,因此你可以执行 s:receive(number_of_bytes_to_read)(至少这就是我所做的,它可以正常工作且没有任何问题)。

2013-07-24 22:59:04