在Ruby中写入套接字时发生套接字错误

在Ruby中写入套接字时发生套接字错误,ruby,sockets,tcp,network-programming,udp,Ruby,Sockets,Tcp,Network Programming,Udp,我有以下代码: # Connect to neighbors and send hello message current_node.neighbors_addresses.each do |address| for i in 0..10 begin sock = TCPSocket.new(address, 3000) break rescue Errno::EHOSTUNREACH, Errno::ECONNREFUS

我有以下代码:

  # Connect to neighbors and send hello message
  current_node.neighbors_addresses.each do |address| 
    for i in 0..10
      begin
        sock = TCPSocket.new(address, 3000)
        break
      rescue Errno::EHOSTUNREACH, Errno::ECONNREFUSED
        puts "before sleep"
        sleep(2)
        puts "after sleep"
      end
    end
    sock.write("Hi from node #{current_node.name}\n")
  end
当前_节点是一个节点对象,其邻居_地址作为实例变量,存储当前节点邻居的ip地址

问题是,来自节点{current_node.name}\n的行sock.writeHi隐藏了错误:

server1.rb:211:in `block in main': undefined method `write' for nil:NilClass (NoMethodError)
    from server1.rb:200:in `each'
    from server1.rb:200:in `main'
    from server1.rb:276:in `<main>'
如果write不是socket类中的一个方法,那么如何写入该套接字

将sock.write放在sock=TCPSocket? -西恩纽特

如果rescue代码执行10次,则在for循环结束后,sock将为零。在调用任何方法或访问对象本身的任何属性之前,需要确保sock是套接字对象。西尼尤特是对的。
–yeyo

Put sock.write紧跟在sock=TCPSocket?这真的有效吗?@umdcoder如果救援代码执行10次,则在for循环结束后,sock将为零。在调用任何方法或访问对象本身的任何属性之前,需要确保sock是套接字对象。西尼尤特是对的。