Luasocket TCP在\ r \ n \ r \ n后停止侦听

时间:2013-07-24 14:31:30

标签: lua luasocket

每当我使用类似的东西收到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标头完美配合,但是当我尝试对它进行http POST时,我得到的标题很好但不是数据,后面是空行(\ r \ n \ r \ n) \ n) 当我将其用作客户时,它会做同样的事情:

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

我看到test1和test2

我已经尝试过使用setOption函数,但它没有工作

有没有办法接收数据?

2 个答案:

答案 0 :(得分:2)

我不确定您的期望,但默认的“模式”是读取一行,因为您的字符串"test1\r\ntest2\r\n\r\ntest3"最后没有换行符,receive调用会等待换行。

通常,在您阅读标题后,您已经知道要阅读的内容的长度,因此您可以s:receive(number_of_bytes_to_read)(至少这是我的工作,它没有任何问题)。

答案 1 :(得分:0)

您是否尝试过填充socket.receive()模式参数? [1]

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

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