我正在尝试在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()
有人可以告诉我必须添加的内容,以便接收输入并将其发送到服务器吗?提前致谢! :)
答案 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