Lua Socket库问题

我正在编写一个应用程序,利用 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;

-- 主要代码
while 1
if(~err) then
err = socket:send(hello);
else
  if(socket:connect("myIP", myPort))) then
  err = 1;
  end -- 第二个 if
end -- 第一个if
waitfor(10); -- 等待10秒
do

(实际上我没有运行这个特定的代码,但它与我的问题中运行的代码相同)。

我发现如果 socket 被关闭,此代码不能重新打开它。我本来以为一旦我们获得主 TCP 对象,我们可以随意打开和关闭。

我可以通过重复 socket.tcp() 调用来强制此代码工作,但我怀疑这会在内存中留下前一个对象,我想避免这种情况。

原文链接 https://stackoverflow.com/questions/6516868

点赞
stackoverflow用户38207
stackoverflow用户38207

connect 调用将永远不会生效,因为你传递的是字符串 "myIP" 而不是变量 myIPmyIP 包含了你的目标 IP 地址。

2011-06-29 07:44:15
stackoverflow用户513763
stackoverflow用户513763

以下是你代码中的错误(从顶部开始)

  • 重用默认模块名称,如socket是一个不良习惯,会让读你代码的人感到困惑
  • while循环语法是 while <condition> do <statements> end
  • 在这种情况下把err设为nil是没有意义的,因为它不存在于片段作用域
  • 发送给未连接的master是没有意义的。
  • 否定使用 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
2011-06-29 08:10:39