'Wer ist online?' Ruby-Netzwerkprogramm
-
22-07-2019 - |
Frage
ich mehrere Embedded-Linux-Systeme haben, die ich schreiben will ‚Wer ist online?‘ Netzwerk-Service in Ruby. Im Folgenden finden Sie verwandten Teil meines Code:
mySocket = UDPSocket.new
mySocket.bind("<broadcast>", 50050)
loop do
begin
text, sender = mySocket.recvfrom(1024)
puts text
if text =~ /KNOCK KNOCK/ then
begin
sock = UDPSocket.open
sock.send(r.ipaddress, 0, sender[3], 50051)
sock.close
rescue
retry
end
end
rescue Exception => inLoopEx
puts inLoopEx.message
puts inLoopEx.backtrace.inspect
retry
end
end
Ich sende den 'knock knock' Befehl von einem PC. Nun ist das Problem, da sie alle die Nachricht zur gleichen Zeit erhalten, versuchen sie auch zur gleichen Zeit zu reagieren, die eine Rohrbruch Ausnahme verursacht (was der Grund meiner ‚Rettungswiederholungs‘ Code ist). Dieser Code funktioniert OK manchmal aber; andermal die Rettung Wiederholungs Teil des Codes verursacht ein oder mehr Systeme reagieren nach 5 Sekunden oder so.
(die durch Rohrbruch Ausnahme von sock.send aufgeweckt wird)Gibt es einen besseren Weg, dies zu tun, da ich nehme an, ich kann nicht den Rohrbruch Ausnahme entkommen?
Lösung
Ich habe diese Ausnahme gefunden durch die ‚r.ipaddress‘ an dem Sendebefehl verursacht wurde, die zu meinem Embedded System Interna verwendet ist ...