Ruby Telnet 拒绝连接

Ruby Telnet refuses connection

我需要制作一个缓存服务器,实际上是一个类似 memcached 的服务器,所以我试图启动一个 Telnet 服务器,这样我就可以发送命令,然后告诉我是否需要存储数据或从密钥中读取。我想这样做是因为我需要实现一个 TCP 服务器并且我需要使用命令所以一个普通的 HTTP 服务器是不够的(尽管我可以 post 数据和地址可以是命令,我还在想办法)。

现在在那个背景之后,真正的问题是我什至无法启动我的 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

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

你可能想要的是:

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 工具混淆的原因。