1

每当我使用以下方式接收 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 POST 时,我得到了标头但不是数据,女巫在后面和空行 (\r\n\r\n) 它做同样的事情当我将其用作客户端时:

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

我看到 test1 和 test2

我试过弄乱 setOption 函数,但没有用

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

4

2 回答 2

2

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

通常,在您阅读标题之后,您已经知道要阅读的内容的长度,因此您可以这样做s:receive(number_of_bytes_to_read)(至少这是我所做的并且它可以正常工作)。

于 2013-07-24T22:59:04.140 回答
0

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

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

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

于 2013-07-24T15:07:46.080 回答