gpt4 book ai didi

sockets - Lua Socket 库问题

转载 作者:行者123 更新时间:2023-12-03 11:52:23 25 4
gpt4 key购买 nike

我正在编写一个利用 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() 调用来强制此代码工作,但是我怀疑这会将前一个对象留在内存中的某个位置,我想避免这种情况。

最佳答案

好吧,您的代码中有问题(从顶部开始)

  • 重用默认模块名称(如 socket)是一个坏习惯,它会使阅读您的代码的人感到困惑
  • 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

    关于sockets - Lua Socket 库问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6516868/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com