ruby 一类轮 |测试远程主机端口

标签 ruby sockets

我正在尝试在 Ruby 中使用 Perl 命令

Perl

perl -MIO::Socket::INET -e 'until(new IO::Socket::INET("localhost:80")) { print "Waiting for network..\n"; sleep 1}'

我如何在 ruby​​ 中做同样的事情?

我试过了:

require 'socket'
until !( TCPSocket.new("localhost",80).close ) do
        puts "Wait..."
        sleep 1
end

我正在寻找一种 Ruby 语言的衬垫。

最佳答案

主要区别在于,如果无法建立 IO,Ruby 将引发错误,因此您需要挽救错误情况。它稍微改变了流程,但仍然非常可行:

loop { break if (TCPSocket.open("localhost",80) rescue nil); puts "Wait...."; sleep 1 }

从其他答案可以看出,可以从 Perl 版本进行更直接的转换。只需使用 Ruby 表达式 (TCPSocket.open("localhost",80) rescue nil) 来替换 Perl 的 new IO::Socket::INET("localhost:80") 以便 Ruby 的引发错误行为更好地匹配 Perl 的在无法创建对象时返回 undef

关于 ruby 一类轮 |测试远程主机端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23989176/

相关文章:

ruby-on-rails - 是否可以自定义外键以使用正则表达式

ruby-on-rails - Datamapper 未执行正确的查询

ios - socket.io 无法处理错误

visual-studio - Windows 中的 SSL 套接字。图书馆?同步/异步?线程?

c - 如何获取 Linux 中给定进程的 TCP 套接字的文件描述符?

ruby - 如何在 Ruby 中为每个 id 创建哈希

ruby-on-rails - 如何获得无效电子邮件或电子邮件字段留空的验证错误?

ruby-on-rails - Rails 中的动态多态 has_many 关联

c - c 中的 GPRS socket

sockets - PNaCl中适当的套接字权限