Lua Socket Lib问题

时间:2011-06-29 07:01:09

标签: sockets lua

我正在编写一个利用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 个答案:

答案 0 :(得分:3)

嗯,代码中的错误(从顶部开始)

  • 使用套接字等默认模块名称是一个糟糕的习惯,它会让读取代码的人感到困惑
  • while循环语法为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

答案 1 :(得分:0)

当您传递字符串“myIP”而不是包含目标IP地址的变量myIP时,连接调用将永远不会起作用。