TCP Startup

  • Halli Hallo,

    kurze Frage zu meinem anliegen:

    Ich habe ein Script gebastelt, oder eher angepasst :huh:

    Spoiler anzeigen
    [autoit]


    TCPStartup() ; TCP wird initialisiert
    $socket = TCPConnect("172.21.122.3", 4321) ; Versuche eine Verbindung zu meinem PC aufzubauen und speicher das Ergebniss in "$socket" ab

    [/autoit] [autoit][/autoit] [autoit]

    $sendedBytes = TCPSend($socket, "aas_0111_mb_abl wurde auf MB-Server erstellt!") ; Sendet den Text an unseren verbundenen Socket

    [/autoit] [autoit][/autoit] [autoit]

    TCPCloseSocket($socket)
    TCPShutdown()

    [/autoit]

    Nun würde ich aber gerne mehrere IP-Adressen erreichen wollen, ohne den kompletten Text 20x zu kopieren und untereinander mit geänderter IP einzufügen.
    Gibt es dort eine Möglichkeit? Leider habe ich so rein gar nichts gefunden =(

    Dann wäre noch die Überlegung da, eine Art "Nachrichtendienst" einzurichten, ähnlich des NetSend Befehls.
    Ich stelle mir vor, eine Oberfläche mit den ganzen IP-Adressen + Benutzername (füge ich einmalig manuell ein) zu basteln (wie die Oberfläche von ICQ), die mir verschiedenfarbige Buttons anzeigt,
    im Sinne von:

    172.21.122.3 - Benutzer "müller": [Button in grün]
    172.21.122.4 - Benutzer "mayer": [Button in gelb]
    172.21.122.5 - Benutzer "meier": [Button in rot]

    Legende:
    grün: Nachricht wurde verschickt und empfangen
    gelb: Nachricht wurde verschickt und noch nicht empfangen
    rot: Nachricht wurde nicht verschickt und nicht empfangen

    Sollte natürlich schnell durchlaufen, da die Wege bekannt sind, dient lediglich zur Überprüfung welcher PC eingeschalten ist und wer die Nachricht bekommen hat.

    Das mit den Button schwirrt mir schon im Kopf rum, wie ich das hin bekommen könnte.
    In einem Tutorial hab ich mich schlau gemacht und dort auch gesehen, dass man diverse MessageBoxen ausgeben kann wie "Empfänger nicht erreicht" etc. Das baut man einfach so um, dass eine Variable X die Farbe rot zugewießen bekommt, wenn der Empfänger nicht erreichbar war.

    Aber jetzt die Masterfrage, ist sowas überhaupt mit AutoIt möglich?!

    Danke!

    Edit:
    Die "Server-Variante", sprich den Empfänger, werde ich in den AutoStart der jeweiligen PCs einfügen ^^

    2 Mal editiert, zuletzt von Nighty (8. Juni 2010 um 13:53)

  • du kannst die ganzen ips in einem array speichern:

    [autoit]

    Global $aIpAdressen[3]
    $aIpAdressen[0] = "172.21.122.3"
    $aIpAdressen[1] = "172.21.122.4"
    $aIpAdressen[2] = "172.21.122.5"

    [/autoit]

    Deine Grafische Überischt würde ich einfach per Gui gestalleten und in der Schleife je nachdem ob es einen Error gab die Farben des Textes auf Rot oder Grün ändern^^

    Hier ein Bsp-Script:

    [autoit]

    Global $aIpAdressen[3]
    $aIpAdressen[0] = "172.21.122.3"
    $aIpAdressen[1] = "172.21.122.4"
    $aIpAdressen[2] = "172.21.122.5"

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    GUICreate("Grafische Überischt")
    Global $aLabels[3]
    $aLabels[0] = GUICtrlCreateLabel($aIpAdressen[0], 10, 10)
    GUICtrlSetColor(-1, 0x0000FF)
    $aLabels[1] = GUICtrlCreateLabel($aIpAdressen[1], 10, 30)
    GUICtrlSetColor(-1, 0x0000FF)
    $aLabels[2] = GUICtrlCreateLabel($aIpAdressen[2], 10, 50)
    GUICtrlSetColor(-1, 0x0000FF)
    GUISetState()

    [/autoit][autoit][/autoit][autoit]

    Senden()

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep(10)
    If GUIGetMsg() = -3 Then Exit
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func Senden()
    Local $iIndex, $iSocket, $iSendedBytes
    TCPStartup()
    For $iIndex = 0 To Ubound($aIpAdressen)-1
    $iSocket = TCPConnect($aIpAdressen[$iSocket], 4321)
    If @error Then
    GUICtrlSetColor($aLabels[$iIndex], 0xFF0000)
    Else
    $iSendedBytes = TCPSend($iSocket, "aas_0111_mb_abl wurde auf MB-Server erstellt!")
    TCPCloseSocket($iSocket)
    GUICtrlSetColor($aLabels[$iIndex], 0x00FF00)
    EndIf
    Next
    TCPShutdown()
    EndFunc

    [/autoit]
  • dient lediglich zur Überprüfung welcher PC eingeschalten ist

    Wieso machst du das dann mit TCP? Mit Ping geht es doch viel einfacher^^

    [autoit]


    Local $aIP[10] = ["192.168.0.1","..","..","..","..","..","..","..","..",".."]
    Local $iTimeout = 200 ; in ms
    For $i=0 to UBound($aIP,1) -1
    If Ping($aIP[$i],$iTimeout) > 0 Then
    ; Aktion ausführen falls erfolgreich
    Else
    ; Aktion ausführen falls nicht erfolgreich
    EndIf
    Next

    [/autoit]
  • Das ist total genial, wie schnell ihr doch seid =)
    Dachte, dass das total zeitaufwändig wird, aber der AMrK liefert mir "als Beispiel" schon 90% von meinem vorhaben =P

    Top Ding!
    Lediglich bei Line 30

    [autoit]

    $iSocket = TCPConnect($aIpAdressen[$iSocket], 4321)

    [/autoit]


    wird noch fehlerhaft angestrichen.

    Danke an Euch beide, werde mir aus beiden was zusammen bauen!

  • In der Zeile ist ein Tippfehler:

    Es muss

    [autoit]

    $iSocket = TCPConnect($aIpAdressen[$iIndex], 4321)

    [/autoit]

    heißen.

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

  • Das gefällt mir alles schon sehr sehr gut :thumbup: Danke!

    Spoiler anzeigen
    [autoit]


    Global $aIpAdressen[3]
    $aIpAdressen[0] = "172.21.122.3"
    $aIpAdressen[1] = "172.21.122.4"
    $aIpAdressen[2] = "172.21.122.5"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUICreate("Empfängerliste")
    Global $aLabels[6]
    $aLabels[0] = GUICtrlCreateLabel($aIpAdressen[0], 10, 10)
    GUICtrlSetColor(-1, 0x0000FF)
    $aLabels[1] = GUICtrlCreateLabel("Name1, Vorname1", 100, 10)

    [/autoit] [autoit][/autoit] [autoit]

    $aLabels[2] = GUICtrlCreateLabel($aIpAdressen[1], 10, 30)
    GUICtrlSetColor(-1, 0x0000FF)
    $aLabels[3] = GUICtrlCreateLabel("Name2, Vorname2", 100, 30)

    [/autoit] [autoit][/autoit] [autoit]

    $aLabels[4] = GUICtrlCreateLabel($aIpAdressen[2], 10, 50)
    GUICtrlSetColor(-1, 0x0000FF)
    $aLabels[5] = GUICtrlCreateLabel("Name3, Vorname3", 100, 50)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    Senden()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(10)
    If GUIGetMsg() = -3 Then Exit
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Senden()
    Local $iIndex, $iSocket, $iSendedBytes
    TCPStartup()
    For $iIndex = 0 To Ubound($aIpAdressen)-1
    $iSocket = TCPConnect($aIpAdressen[$iIndex], 4321)

    [/autoit] [autoit][/autoit] [autoit]

    If @error Then
    GUICtrlSetColor($aLabels[$iIndex], 0xFF0000)

    [/autoit] [autoit][/autoit] [autoit]

    Else
    $iSendedBytes = TCPSend($iSocket, "das hier ist die Nachricht")
    TCPCloseSocket($iSocket)
    GUICtrlSetColor($aLabels[$iIndex], 0x00FF00)
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    TCPShutdown()
    EndFunc

    [/autoit]

    Es besteht jetzt noch der kleine Fehler, dass wenn das Skript ausgeführt wird, er die Nachricht an Person 1 und Person 2 sendet. Person 3 kann er nicht erreichen, was auch richtig so ist.
    Anzeigen tut er jedoch was anderes ^^
    Er markiert die IP und den Namen von Person1 direkt grün, dann rödelt er und rödelt. Nach 10 Sekunden zeigt er die IP von Person 2 rot an, dabei hat dieser die Nachricht bekommen!
    Mit Person 3 macht er dann gar nichts mehr, diese bleibt so bestehen =>
    http://img153.imageshack.us/f/clipboard01se.jpg/

    Ich bedanke mich bei Euch :whistling:

  • Ahh habs selbst gefunden...
    Da ich nur 3 IP-Adressen angegeben habe, aber 6 labels hatte, ging das nicht ganz auf!
    Hab ich geändert auf

    [autoit]


    GUICreate("Empfängerliste")
    Global $aLabels[3]
    $aLabels[0] = GUICtrlCreateLabel("Name1, Vorname1", 100, 10)
    $aLabels[0] = GUICtrlCreateLabel($aIpAdressen[0], 10, 10)

    [/autoit][autoit][/autoit][autoit]

    $aLabels[1] = GUICtrlCreateLabel("Name2, Vorname2", 100, 30)
    $aLabels[1] = GUICtrlCreateLabel($aIpAdressen[1], 10, 30)

    [/autoit][autoit][/autoit][autoit]

    $aLabels[2] = GUICtrlCreateLabel("Name3, Vorname3", 100, 50)
    $aLabels[2] = GUICtrlCreateLabel($aIpAdressen[2], 10, 50)
    GUISetState()

    [/autoit]

    und schon funktiniert es!

  • Die letzte Masterfrage, was ich nicht verstehe... ?(

    Ich kann die IP-Adressen 172.21.122.3 + 172.21.122.4 ohne Probleme erreichen, werden auch je nach Status farblich markiert.

    Aber auf Teufel komm raus erreiche ich die 172.21.122.2 nicht... Selbst wenn ich den "Empfänger" bei mir starte... Immer wird diese rot markiert und es kommt keine Meldung

    [autoit]


    TCPStartup() ; TCP wird initialisiert

    [/autoit][autoit][/autoit][autoit]

    $mainsocket = TCPListen("172.21.122.2", 4321) ; Den mainsocket erstellen

    [/autoit][autoit][/autoit][autoit]

    While 1 ; Endlosschleife
    $acceptedSocket = TCPAccept($mainsocket) ; Wir versuchen eine möglicher Verbindung anzunehmen

    [/autoit][autoit][/autoit][autoit]

    If $acceptedSocket <> -1 Then ; Wenn $acceptedSocket ungleich -1 ist, ...
    $receivedData = TCPRecv($acceptedSocket, 1024) ; Wenn eine Socketverbindung hergestellt wurde, empfange ein Paket vom Client ($connectedSocket)
    MsgBox(64, "Nachricht empfangen!", "Es wurde eine Nachricht empfangen: " & $receivedData)
    TCPCloseSocket($acceptedSocket)
    EndIf
    WEnd

    [/autoit]

    Warum?! Genau das selbe Skript (mit anderer IP) lasse ich ja auch auf anderen PC's im Hintergrund laufen, wo es funktioniert.

    Danke im voraus für einen Tipp!