Guten Morgen,
ich grübel und grübel, aber komme nicht wirklich weiter...
Kurz mein Vorhaben:
Ich schicke täglich über TCP StartUp eine Nachricht an verschiedene Benutzer, sodass diese darauf Aufmerksam gemacht werden, ein bestimmtes Programm zu beenden.
Läuft auch einwandfrei! Hier kurz der Quelltext als Test, bevor das "Programm" online geht mit 30 anderen IP-Adressen:
Spoiler anzeigen
Global $aIpAdressen[3]
$aIpAdressen[0] = "172.21.122.2"
$aIpAdressen[1] = "172.21.122.3"
$aIpAdressen[2] = "172.21.122.4"
GUICreate("Empfängerliste")
Global $aLabels[3]
$aLabels[0] = GUICtrlCreateLabel("Name1, Vorname1", 100, 10)
$aLabels[0] = GUICtrlCreateLabel($aIpAdressen[0], 10, 10)
GUICtrlSetColor(-1, 0x0000FF)
$aLabels[1] = GUICtrlCreateLabel("Name2, Vorname2", 100, 30)
$aLabels[1] = GUICtrlCreateLabel($aIpAdressen[1], 10, 30)
GUICtrlSetColor(-1, 0x0000FF)
$aLabels[2] = GUICtrlCreateLabel("Name3, Vorname3", 100, 50)
$aLabels[2] = GUICtrlCreateLabel($aIpAdressen[2], 10, 50)
GUICtrlSetColor(-1, 0x0000FF)
GUISetState()
Senden()
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(10)
If GUIGetMsg() = -3 Then Exit
WEnd
Func Senden()
Local $iIndex, $iSocket, $iSendedBytes
TCPStartup()
For $iIndex = 0 To Ubound($aIpAdressen)-1
$iSocket = TCPConnect($aIpAdressen[$iIndex], 4321)
If @error Then
GUICtrlSetColor($aLabels[$iIndex], 0xFF0000)
Else
$iSendedBytes = TCPSend($iSocket, "NACHRICHT!")
TCPCloseSocket($iSocket)
GUICtrlSetColor($aLabels[$iIndex], 0x00FF00)
EndIf
Next
TCPShutdown()
EndFunc
Nun kann es aber vorkommen, dass Mitarbeiter im Urlaub sind, der Rechner somit aus ist. Wenn ich das Skript laufen lasse, dann rödelt er bei IP-Adressen und springt erst nach einer bestimmten Zeitspanne weiter. Ist blöd! Ich muss so schnell wie es nur geht die Nachricht an die Empfänger raus schicken, ohne das er lange nach einer IP sucht und dann nicht findet.
Wie würdet ihr das am besten lösen?
Ich dachte an eine IF-Schleife, sowie das über den ping-Befehl zu lösen
Spoiler anzeigen
Global $aIpAdressen[3]
$aIpAdressen[0] = "172.21.122.2"
$aIpAdressen[1] = "172.21.122.3"
$aIpAdressen[2] = "172.21.122.4"
GUICreate("Empfängerliste")
Global $aLabels[3]
$aLabels[0] = GUICtrlCreateLabel("Name1, Vorname1", 100, 10)
$aLabels[0] = GUICtrlCreateLabel($aIpAdressen[0], 10, 10)
GUICtrlSetColor(-1, 0x0000FF)
$aLabels[1] = GUICtrlCreateLabel("Name2, Vorname2", 100, 30)
$aLabels[1] = GUICtrlCreateLabel($aIpAdressen[1], 10, 30)
GUICtrlSetColor(-1, 0x0000FF)
$aLabels[2] = GUICtrlCreateLabel("Name3, Vorname3", 100, 50)
$aLabels[2] = GUICtrlCreateLabel($aIpAdressen[2], 10, 50)
GUICtrlSetColor(-1, 0x0000FF)
GUISetState()
$ping[0] = Ping($aIpAdresse[0])
If $ping > 0 Then
Senden()
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(10)
If GUIGetMsg() = -3 Then Exit
WEnd
Func Senden()
Local $iIndex, $iSocket, $iSendedBytes
TCPStartup()
For $iIndex = 0 To Ubound($aIpAdressen)-1
$iSocket = TCPConnect($aIpAdressen[$iIndex], 4321)
If @error Then
GUICtrlSetColor($aLabels[$iIndex], 0xFF0000)
Else
$iSendedBytes = TCPSend($iSocket, "das hier ist die Nachricht")
TCPCloseSocket($iSocket)
GUICtrlSetColor($aLabels[$iIndex], 0x00FF00)
EndIf
Next
TCPShutdown()
EndFunc
EndIf
[/autoit] [autoit][/autoit] [autoit]$ping[1] = Ping($aIpAdresse[1])
...
...
...
Aber das funktioniert nicht so wie ich es mir vorstelle, vorallem wenn ich 30 IP-Adressen mit diesem Rattenschwanz in ein Skript schreibe...
Bin ich ja bei geschätzen 300 Zeilen für eine einfache Nachricht... Aber das wäre noch nicht mal tragisch