gpt4 book ai didi

ruby - 试图让客户端在 Ruby 制作的 TCP 服务器上显示命令输出

转载 作者:可可西里 更新时间:2023-11-01 02:51:32 24 4
gpt4 key购买 nike

因此,我试图获得一个用 Ruby 制作的 TCP 服务器,以在客户端上显示命令的输出,有点像 SSH 服务器,以 Microsoft TelNet 作为客户端。服务器代码:

require 'socket'

print "Enter port to open server on:"
port = gets().chomp
server = TCPServer.open(port)

print "Server Ready!\n"

loop do
client = server.accept
client.puts "Hello, Please enter 'echo hello'\n"
loop do
while line = client.gets
puts(`#{line}`)
end
end
end

澄清一下:我正在尝试让命令输出到客户端,因为服务器输出已经工作。

最佳答案

因此,在进一步搜索网络后,我发现了一个包含答案的博客。博客链接:http://blog.honeybadger.io/capturing-stdout-stderr-from-shell-commands-via-ruby/

所以基本上人们使用一个名为“Open3”的鲜为人知的库来做我想做的事情,即捕获并输出到客户端“stdin”和“status”。在代码中,我假设这些语句位于顶部:

require 'socket'
require 'open3'

当然还有服务器的开启和修改后的代码:

port = 80
server = TCPServer.open(port)

loop do
client = server.accept
while line = client.gets.chomp # get user input
begin
stdin, stdout, status = Open3.capture3("#{line}") #output to console
puts stdin # put the output to the server
puts stdout
puts status
client.puts stdin # put output to the client
client.puts stdout
client.puts status
rescue # in case the command is incorrect
if line == 'closeServer' then # close if this command is given
puts "Client #{userInput} closing server!"
puts "Closing...."
client.puts "Closing server..."
client.close
exit
else
puts "Client #{userInput} put invalid command '#{line}'."
client.puts "Incorrect command '#{line}'."
end
end
end
end

关于ruby - 试图让客户端在 Ruby 制作的 TCP 服务器上显示命令输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32386664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com