2016-08-19 5 views
0

Ich muss einen Cache-Server machen, einen wie Memcached tatsächlich, also versuche ich einen Telnet-Server zu starten, damit ich Befehle senden kann, die mir dann sagen, ob ich Daten speichern oder lesen muss Schlüssel. Ich dachte daran, dies zu tun, da ich einen TCP-Server implementieren muss und ich Befehle verwenden muss, so dass ein normaler HTTP-Server nicht ausreichen würde (obwohl ich die Daten posten könnte und die Adresse könnte der Befehl sein, bin ich immer noch es herausfinden).Ruby Telnet verweigert Verbindung

Jetzt, nach diesem Hintergrund ist das eigentliche Problem ist, dass ich nicht einmal meinen Telnet-Server starten kann, ist dies der Code, den ich im Web gefunden:

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 

ich viel von diesem nicht wirklich verstehen Vielleicht versuche ich, mich mit dem vorhandenen Telnet-Server mit diesem Code zu verbinden, und deshalb funktioniert es nicht. Wie auch immer der Fehler ich, es ist dies immer bin:

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 

Sie für jede Hilfe oder Spitze Vielen Dank im Voraus, wie gesagt, ich bin immer noch versuchen, herauszufinden, wie dies zu tun.

+2

Das ist ein Client. Wo ist dein Server? Es ist sehr selten, dass Sie eines dieser Programme in freier Wildbahn sehen. – tadman

+0

Ich dachte, ich würde damit einen Server starten. Ich habe es vorher versucht: '@server = TCPServer.new (host, port)' mit "127.0.0.1" 8899 und die übliche Schleife do socket = @ server.accept ... etc. Aber wenn ich versuchte, eine Verbindung zu ihm über den Cmd tun Telnet-Host-Port, aber es schlägt mit dem gleichen Fehler. Ich glaube, ich habe noch nie einen Telnet-Server gestartet, wie kann ich einen mit Ruby starten? –

+1

Sie geben wahrscheinlich nicht den Port auf Ihrem Client an und der Standardwert ist 23. Es ist erwähnenswert, dass Telnet ein Museumsstück ist und Sie wahrscheinlich stattdessen einen regulären TCPSocket verwenden möchten. – tadman

Antwort

1

Was möchten Sie wahrscheinlich ist dies:

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

, die auf Port 8899 auf dem lokalen Computer verbinden. Wie bereits erwähnt, das Telnet-Protokoll ist alles andere als tot und hat wirklich keinen Nutzen in 2016.

Die telnet Client auf der anderen Seite ist ideal für die Verbindung zu TCP-Dienste mit einem Klartext-Protokoll. Dies beinhaltet HTTP und, wie Sie gesehen haben, Memcache.

Ich würde empfehlen, die allgemeinere TCPServer als Grundlage für Ihren Code verwenden:

server = TCPServer.new(8899) 

Dann können Sie Ihren Service von dort mit Themen aufbauen, oder, wenn nötig, Fasern.

Während Telnet möglicherweise tot ist, ist TCP/IP am Leben und gut. Einfache, Klartext-Protokolle sind so beliebt wie immer, weshalb es leicht ist, telnet das Protokoll mit telnet das Tool zu verwechseln.

+0

Danke @tadman der 'server = TCPServer.new (8899)' hat perfekt funktioniert, Ich kann jetzt mit meinem cmd verbinden. Ich werde versuchen, die Befehle zum Speichern und Lesen von Daten zu implementieren. Danke nochmal –