我试图在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()
有没有人能告诉我我必须添加什么,这样它就会接收输入并将其发送到服务器?提前感谢!:)
您必须要么发送,要么接收,因为您不能同时做这两件事。使用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