每当我使用类似的东西收到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函数,但它没有工作
有没有办法接收数据?
答案 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