Проблема с луасокетом - PullRequest
4 голосов
/ 24 марта 2011

Я пытаюсь прочитать некоторые (двоичные) данные из сокета 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

Обновление

Кажется, проблема в том, что форма приема (число) ожидает точное числобайты и ждите их.Но если я не знаю, сколько осталось байтов, как это сделать?(запрос http - это только пример, к которому я обращаюсь к универсальному запросу на чтение байтов из сокета)

lua 5.1.3

1 Ответ

2 голосов
/ 24 марта 2011

Хорошо, я нашел это решение

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"

Недостатком является установленное время ожидания, поскольку запрос будет занимать не менее 1 секунды, а любая сетевая задержка более 1 секунды приведет к ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...