我需要创建一个缓存服务器,实际上就像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
提前感谢您提供任何帮助或提示,正如我所说,我仍在努力弄清楚如何做到这一点。
答案 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
工具混淆。