这是我的秘密,
我正在使用Net :: Telnet :: new编写ruby客户端,另一端服务器是ubuntu。 我添加了一个eventmachine来监视Net :: Telnet :: new创建的套接字。
这是我的问题, 例如,我使用cmd方法发送命令:
client.cmd(" ping 127.0.0.1")然后eventmachine继续输出响应。 我想停止ping进程并停止ping响应,所以我需要发送命令" Ctrl + z"或者服务器的某些东西(比如我们使用telnet终端)。
所以我怎么能用ruby做到这一点?我试过238.chr,237.chr,236.chr。那些没有用的。我也试图发送26.chr,这个停了下来。但我的代码挂在那里,在发送26.chr之后我无法用cmd方法发送另一个命令。
这里有一些代码,请忽略ws.onopen,ws.onmessage,这些只是eventmachine中的websocket。
ws.onopen {
puts "Web socket is opened"
ws.send "terminal to the node"
$nodeSocket = Net::Telnet::new("Host" => "10.4.0.50","Timeout" => 10,"Prompt" => /login/ )
puts $nodeSocket
$nodeSocket.cmd("String" =>"user","Match" => /Password/) { |c| ws.send c}
$nodeSocket.cmd("String" => "password","Match" => /\$/) { |c| ws.send c}
Thread.new do
EM.run{
$conn = EM.watch $nodeSocket.getSocket,Foo,ws
$conn.notify_readable = true
}
end
}
ws.onmessage { |msg|
begin
puts msg
if msg =~ /command:(.*)/
puts $1
if $1 == "stop"
$nodeSocket.cmd(26.chr)
$nodeSocket.cmd("ls -l")
$nodeSocket.cmd("pwd")
else
$nodeSocket.cmd($1)
end
end
ws.send msg
rescue
puts "there's an error happened"
end
}