在我的 Rails 3.2 应用程序中,我使用了来自TradingView的嵌入式 javascript 图表。但是,似乎必须打开端口 443 才能显示。因此,我正在尝试检查端口是否对用户开放,如果没有,则显示图表之外的其他内容。
我发现这篇文章“Ruby - 查看端口是否打开”并且一直在处理这个答案:
require 'socket'
require 'timeout'
def port_open?(ip, port, seconds=1)
Timeout::timeout(seconds) do
begin
TCPSocket.new(ip, port).close
true
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
false
end
end
rescue Timeout::Error
false
end
但是,我将其修改为:
def port_open?(ip, port=443, seconds=1)
因为要检查的端口对我来说总是一样的。
我正在调用这样的方法:
@ip = request.remote_ip
test = port_open?(@ip)
当我在防火墙后面时,我发现了这个问题。
我不明白的是,我现在可以看到图表,因为我不在防火墙后面,但是如果我在本地运行下面的代码,我可以看到图表,但我收到了false
.
但是,如果我改变port=3000
我收到的真实。我究竟做错了什么?谢谢!