Lua Telnet 发送和接收

我正在尝试在 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()

请问有人能告诉我我必须添加什么才能将其接收到的输入发送到服务器吗?先谢谢! :)

点赞
用户570336
用户570336

你必须在任意时间内要么发送要么接收,因为你不能同时做两件事情。使用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

    -- 从stdin中读取
    local input = io.read("*l")
    if input ~= "" then
        server:send(input)
    end
end
2015-08-19 08:22:42