gpt4 book ai didi

ruby - 如果无法建立连接,如何在Ruby中建立TCP连接而不引起异常?

转载 作者:行者123 更新时间:2023-12-03 11:53:13 29 4
gpt4 key购买 nike

我正在用Ruby编写一个简单的网络分析器,并希望尝试连接到计算机上的所有端口:

(1..65535).each do |port|
socket = TCPSocket.new('127.0.0.1', port)
end

问题是端口不连接时,我收到一个Ruby错误:
Errno::ECONNREFUSED: Connection refused - connect(2) for "127.0.0.1" port 1

我知道我可以捕捉到异常:
(1..65535).each do |port|
begin
socket = TCPSocket.new('127.0.0.1', port)
rescue => ex
puts "problem: #{ex}"
end
end

但是为此目的使用异常感觉有点丑陋……知道我将无法连接到大多数端口。有没有更好的方法来解决这个问题?

最佳答案

内联救援

您可能只是通过内联救援来忽略未打开的套接字。例如:

require 'socket'
sockets =
(1..65535).map { |port| TCPSocket.new('127.0.0.1', port) rescue nil }.compact

您仍在挽救该异常,但实际上是将其与您无关地丢弃。然后,您可以使用存储在套接字中的打开套接字的 数组来执行某些操作。举一个例子:
sockets.map &:addr

关于ruby - 如果无法建立连接,如何在Ruby中建立TCP连接而不引起异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26266389/

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