Ruby Telnet拒绝连接

时间:2016-08-19 16:01:03

标签: ruby server telnet

我需要创建一个缓存服务器,实际上就像memcached一样,所以我试图启动一个Telnet服务器,这样我就可以发送命令,然后告诉我是否需要存储数据或从密钥读取。我想这样做,因为我需要实现一个TCP服务器,我需要使用命令,所以普通的HTTP服务器是不够的(虽然我可以发布数据,地址可能是命令,我仍然搞清楚)。

现在在那个背景之后,真正的问题是我甚至无法启动我的Telnet服务器,这是我在网上找到的代码:

localhost = Net::Telnet::new("Host" => "localhost",
                         "Timeout" => 10,
                         "Prompt" => /[$%#>] \z/n)
localhost.login("username", "password") { |c| print c }
localhost.cmd("command") { |c| print c }
localhost.close

我真的不太了解这一点,也许我正在尝试使用该代码连接到现有的Telnet服务器,这就是为什么它无法正常工作。无论如何我得到的错误是这样的:

C:/Ruby22-x64/lib/ruby/2.2.0/net/telnet.rb:350:in `initialize': No connection could be made because the target machine actively refused it. - connect(2) for "localhost" port 23 (Errno::ECONNREFUSED)
from C:/Ruby22-x64/lib/ruby/2.2.0/net/telnet.rb:350:in `open'
from C:/Ruby22-x64/lib/ruby/2.2.0/net/telnet.rb:350:in `block in initialize'
from C:/Ruby22-x64/lib/ruby/2.2.0/timeout.rb:88:in `block in timeout'
from C:/Ruby22-x64/lib/ruby/2.2.0/timeout.rb:98:in `call'
from C:/Ruby22-x64/lib/ruby/2.2.0/timeout.rb:98:in `timeout'
from C:/Ruby22-x64/lib/ruby/2.2.0/net/telnet.rb:349:in `initialize'
from C:/Users/Bruno/RubymineProjects/Ruby Server/Server.rb:37:in `new'
from C:/Users/Bruno/RubymineProjects/Ruby Server/Server.rb:37:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'

Process finished with exit code 1

提前感谢您提供任何帮助或提示,正如我所说,我仍在努力弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:1)

你可能想要的是:

localhost = Net::Telnet::new(
  "Host" => "localhost",
  "Port" => 8899,
  "Timeout" => 10,
  "Prompt" => /[$%#>] \z/n
)

这将连接到本地计算机上的端口8899。如上所述,telnet协议几乎已经死亡,2016年确实无用。

另一方面,telnet客户端非常适合使用纯文本协议连接到TCP服务。这包括HTTP,正如您所观察到的,Memcache。

我建议使用更通用的TCPServer作为代码的基础:

server = TCPServer.new(8899)

然后,您可以使用线程或必要时使用光纤来构建服务。

虽然telnet可能已经死了,但TCP / IP还活着。简单的纯文本协议一如既往地流行,这就是为什么很容易将telnet协议与telnet工具混淆。