Lua Socket Lib Вопрос - PullRequest
       2

Lua Socket Lib Вопрос

2 голосов
/ 29 июня 2011

Я пишу приложение, использующее Lua Socket lib. Вот простой фрагмент кода, который описывает мою проблему.

local com=require("socket");
local socket=com.tcp();
local hello="hi stack overflow";
local myIP="192.168.1.1";
local myPort = 2000;
local err = nil;

-- Main
while 1
if(~err) then
err = socket:send(hello);
else
  if(socket:connect("myIP", myPort))) then
  err = 1;
  end -- second if
end -- first if
waitfor(10); -- wait for 10 sec.
do

(я на самом деле не запускал этот конкретный код, но он идентичен работающему коду в моей проблеме). Когда я вижу, что если сокет закрыт, этот код не может открыть его снова. Я бы догадался, как только мы возьмем главный объект TCP, который мы можем открывать и закрывать по своему усмотрению.

Я могу заставить этот код работать, повторяя вызов socket.tcp (), однако я подозреваю, что предыдущий объект остается где-то в памяти, и я хочу избежать этого.

Ответы [ 2 ]

3 голосов
/ 29 июня 2011

Что ж, в вашем коде что-то не так (начиная с самого верха)

  • Это плохой привычка повторять имена модулей по умолчанию, такие как socket, это сбивает с толку людей, читающих ваш код
  • Несмотря на то, что синтаксис цикла равен while <condition> do <statements> end
  • , установка err в значение nil в этом случае бесполезна, так как он не существует в области действия фрагмента
  • , нет смысла отправлять его на неподключенный мастер.
  • отрицание выполняется с помощью not вместо ~
  • вы передаете строку "myIP" вместо фактического IP

, тогда есть такжефункция socket.sleep() вас может заинтересовать.

Мне интересно, почему вы так усложняете цикл, а не просто используете что-то вроде:

require("socket");
local soc=socket.tcp();
local hello="hi stack overflow";
local myIP="192.168.1.1";
local myPort = 2000;



local stat,err=socket:connect(myIP, myPort)
if not stat then
   error(err)
else
    -- Main
    while not err do
        err = socket:send(hello)
        socket.sleep(10)
    end
end
0 голосов
/ 29 июня 2011

Вызов connect никогда не будет работать, поскольку вы передаете строку «myIP», а не переменную myIP, которая содержит целевой IP-адрес.

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