Lua Telnet Send&接收

时间:2015-08-19 03:11:39

标签: sockets lua telnet game-development

我正在尝试在Lua中使用简单的telnet会话。我环顾互联网并没有找到解决我的问题的方法,它试图发送数据并接收数据。

到目前为止,我已经有了这个接收数据的脚本,但我不能发送任何回报:

local socket = require "socket"
local ip, port = "avalon-rpg.com", 23
local server, err = socket.connect(ip, port)

if server == nil then
  print(err)
else
  while true do
    s, status, partial = server:receive()
    print(s or partial)
    if status == "closed" then
      break
    end
  end
end

server:close()

有人可以告诉我必须添加的内容,以便接收输入并将其发送到服务器吗?提前致谢! :)

1 个答案:

答案 0 :(得分:1)

您必须 发送接收,因为您无法同时执行这两项操作。使用socket:setTimeout,您至少可以使接收部分无阻塞。但是,Lua中的文件IO始终是阻塞的,因此您必须

a)使用外部库从stdin读取而不阻止程序流

b)限制程序的功能

对于b),您可以定义您的客户端在发送命令后总是等待响应(因此,在您发出新命令之前,服务器上另外发送的文本将可见)。我想你想要连接到MUD,这可能是一件合理的事情(尽管我不知道你想要连接的特定MUD)。

一旦你弄清楚要做什么(使用外部库或无限期地等待用户输入),你可以相对简单地发送你的命令:

while true do
    local s, status, partial = server:receive()
    print(s or partial)
    if status == "closed" then
        break
    end

    -- Read from stdin
    local input = io.read("*l")
    if input ~= "" then
        server:send(input)
    end
end