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