繁体   English   中英

luasocket问题

[英]Problem with luasocket

我正在尝试从lua套接字读取一些(二进制)数据,但是上面的代码并未终止重复循环。 我怎么知道流的尽头已经到了?

client = require("socket")
client = socket.connect("www.google.com",80)
client:send("GET / HTTP/1.1\n\n")
repeat
  print "read"
  line = client:receive(512)
  print "read done"
  print(#line)
until line==""

print "all done"

Output is
read
read done
512
read

更新资料

似乎receive(number)格式要求确切的数字字节并等待它们的问题。 但是,如果我不知道还剩下多少个字节,该怎么办? (http请求只是一个示例,我引用的是从套接字读取字节的通用请求)

lua 5.1.3

好的,我已经找到了解决方案

client = require("socket")
client = socket.connect("www.google.com",80)
client:send("GET / HTTP/1.1\n\n")
client:settimeout(1)
repeat
  print "read"
  line,err,rest = client:receive(512)
  print "read done"
  if line then print(line) end
  if rest then print(rest) end
until err

print "all done"

缺点是settimeout,因为请求将至少花费1秒钟,并且任何网络延迟超过1秒都将导致错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM