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?

War es hilfreich?

Lösung

Ich habe diese Ausnahme gefunden durch die ‚r.ipaddress‘ an dem Sendebefehl verursacht wurde, die zu meinem Embedded System Interna verwendet ist ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top