【问题标题】:Ruby IO from a service at port 6557 in Sinatra来自 Sinatra 端口 6557 的服务的 Ruby IO
【发布时间】:2012-10-08 08:57:08
【问题描述】:

我必须在 sinatra 中转储一项服务并将其显示在网页的内容区域中。

我必须通过代码访问的服务在端口 6557 的服务器上运行。它不使用任何加密或身份验证。它是一个普通的只读请求响应,类似于 http。 这是在终端中起作用的方法

$ echo "GET hosts" | nc 192.168.1.1 6557

给了我预期的输出。我需要使用 sinatra 应用程序做类似的事情。

我写了这段代码,但完全不正确。有人可以帮助我提供代码或查找材料或示例。

get '/' do
        host = "192.168.1.1"
        port = 6557
        dat = ""
        @socket = TCPSocket.open (host, port)
                while(true)
                        if(IO.select([],[],[@socket],0))
                                socket.close
                                return
                        end
                        begin
                                while( (data = @socket.recv_nonblock(100)) != "")
                                        dat = dat+ data
                                end
                                rescue Errno::EAGAIN
                        end
                        begin
                                @str = "GET hosts"
                                @socket.puts(@str);
                        rescue Errno::EAGAIN
                        rescue EOFError
                                exit
                        end
                        IO.select([@socket], [@socket], [@socket])
                end
        @line = dat
        erb :info
end

执行中的代码就挂了。 此外,如果可能,请提供一些链接以供阅读以了解问题的概念背景。

【问题讨论】:

    标签: ruby io rubygems sinatra


    【解决方案1】:

    我认为 Ruby 等价于你的 shell 命令应该很简单:

    require "socket"
    
    socket = TCPSocket.new "192.168.1.1", 6557
    socket.puts "GET hosts"
    socket.read
    

    根据文档,#read 应该会自动关闭套接字,因此您无需担心手动执行此操作。

    【讨论】:

      【解决方案2】:

      您可以使用反引号或system 命令直接从 ruby​​ 执行 shell 命令。这样的事情可能对你有用:

      get "/" do
        @line = `echo "GET hosts" | nc 192.168.1.1 6557`
        erb :info
      end
      

      查看ruby docs for Kernel#system 了解更多信息。

      【讨论】:

      • 很好,但我想要一个更面向 ruby​​ 的方法
      猜你喜欢
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 2016-06-24
      相关资源
      最近更新 更多