TCPSend / TCPReceive

  • Hallo,

    ich habe mir hier was zum "überwachen" geschrieben was ich zur Fehlerentdeckung benutzen möchte.

    Der Server horcht auf Nachrichten und zeigt diese momentan an und schreibt die Meldungen in Logfiles.

    Der Client schickt beim Start und auch bei weiteren Ereignissen Meldungen an den Server.
    Zusätzlich kann der Client den PC Herunterfahren/Neustarten.

    Ich habe dies nun mit ein paar PCs ausprobiert und diese automatisiert neu starten lassen (und das Programm per Registry jedesmal starten lassen).
    Das Problem das ich habe liegt darin das manche TCPSends verschwinden, das heißt diese nur mit "" (also ohne Inhalt) beim Server ankommt. Hat jemand eine Ahnung woran das liegen kann ?

    Server:

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------
    Version: 3.2.1.12 (beta)
    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    ;SERVER!! Start Me First !!!!!!!!!!!!!!!
    #include <GUIConstants.au3>
    #Include <Date.au3>

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

    ; Change to OnEvent mode
    Opt("GUIOnEventMode", 1)

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

    ; Set Some reusable info
    ; Set your Public IP address (@IPAddress1) here.
    Dim $szIPADDRESS = @IPAddress1
    Dim $nPORT = 33891

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

    ; Create a GUI for messages
    ;==============================================
    Dim $GOOEY = GUICreate("My Server (IP: " & $szIPADDRESS & ")",600,200)
    Dim $edit = GUICtrlCreateEdit("",10,10,580,180)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents", $GOOEY)
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents", $GOOEY)
    GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents", $GOOEY)
    GUISetState()

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

    while 1
    ; Start The TCP Services
    ;==============================================
    TCPStartUp()

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

    ; Create a Listening "SOCKET".
    ; Using your IP Address and Port 33891.
    ;==============================================
    $MainSocket = TCPListen($szIPADDRESS, $nPORT)

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

    ; If the Socket creation fails, exit.
    If $MainSocket = -1 Then Exit

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

    ; Initialize a variable to represent a connection
    ;==============================================
    Dim $ConnectedSocket = -1

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

    ;Wait for and Accept a connection
    ;==============================================
    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1

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

    Dim $recv

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

    ; Try to receive (up to) 2048 bytes
    ;----------------------------------------------------------------
    $recv = TCPRecv( $ConnectedSocket, 2048 )

    ; If the receive failed with @error then the socket has disconnected
    ;----------------------------------------------------------------
    If @error Then
    ;MsgBox(0, "@Error", "TCPReceive failed")
    WriteLog("TCPReceive failed @Error")
    ExitLoop
    EndIf

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

    ; Update the edit control with what we have received
    ;----------------------------------------------------------------
    ; Get IP of client connecting
    $szIP_Accepted = 0
    while $szIP_Accepted = 0
    $szIP_Accepted = SocketToIP($ConnectedSocket)
    WEnd

    If $recv <> "" Then
    GUICtrlSetData($edit, $szIP_Accepted & @TAB & _Now() & @TAB & $recv & @CRLF & GUICtrlRead($edit))
    WriteLog($recv, $szIP_Accepted)
    Else
    ;MsgBox(0, "<Else>", "TCPReceive failed")
    WriteLog("TCPReceive failed <Else>", $szIP_Accepted)
    EndIf

    if $ConnectedSocket <> -1 Then TCPCloseSocket( $ConnectedSocket )

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

    TCPShutDown()
    WEnd

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

    ; Function to return IP Address from a connected socket.
    ;----------------------------------------------------------------------
    Func SocketToIP($SHOCKET)
    Local $sockaddr = DLLStructCreate("short;ushort;uint;char[8]")
    Local $aRet = DLLCall("Ws2_32.dll","int","getpeername","int",$SHOCKET, _
    "ptr",DLLStructGetPtr($sockaddr),"int_ptr",DLLStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
    $aRet = DLLCall("Ws2_32.dll","str","inet_ntoa","int",DLLStructGetData($sockaddr,3))
    If Not @error Then $aRet = $aRet[0]
    Else
    $aRet = 0
    EndIf
    $sockaddr = 0
    Return $aRet
    EndFunc

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

    ; Funktion um in das Logfile zu schreiben
    Func WriteLog($text, $ip)
    ;MsgBox(0, "Info", $text, 5)
    $fso = FileOpen("C:\IPC_Daten\" & $ip & ".log", 1)
    ; Wenn das Logfile nicht geöffnet werden konnte, dann Fehlermeldung anzeigen und PC neu starten
    if $fso = -1 Then
    $fsoError = FileOpen("C:\IPC_Daten\IPC_Error.log", 1)
    FileWriteLine($fsoError, _NOW() & @TAB & "Konnte Logfile <<" & $logFileName & ">> nicht schreiben:" & @TAB & $text)
    FileClose($fsoError)
    MsgBox(0, "Fehler", "Konnte das Logfile <<" & $logFileName & ">> nicht öffnen. Bitte informieren Sie IT2.1.", 600000)
    Else
    FileWriteLine($fso, _NOW() & @TAB & $text)
    FileClose($fso)
    endIf
    EndFunc

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

    Func SpecialEvents()
    ;MsgBox(0, "SpecialEvents", @GUI_CTRLID)
    Select
    Case @GUI_CTRLID = $GUI_EVENT_CLOSE
    ;MsgBox(0, "Close Pressed", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
    Exit
    Case @GUI_CTRLID = $GUI_EVENT_MINIMIZE
    ;MsgBox(0, "Window Minimized", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
    Case @GUI_CTRLID = $GUI_EVENT_RESTORE
    ;MsgBox(0, "Window Restored", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
    EndSelect
    EndFunc

    [/autoit]

    Client:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #Include <date.au3>
    #Include <GuiListView.au3>
    #include <misc.au3>

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

    ; Change to OnEvent mode
    Opt("GUIOnEventMode", 1)
    Opt("TrayOnEventMode",1)
    Opt("TrayAutoPause",0)
    Opt("TrayMenuMode",1)
    Opt("OnExitFunc", "endscript")

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

    dim $logFileName = @ScriptDir & "\Shutdown_IPC.log"
    dim $servername = "xxx"

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

    WriteLog("Skript gestartet")

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

    ;*********************************************************************************************************************************************
    ;********* Modus Produktiv/Test <<ANFANG>>
    ;*********************************************************************************************************************************************
    ;dim $modus = 1 ;Test
    dim $modus = 0 ;Produktiv

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

    if $modus = 1 then
    $servername = "xxx"
    ElseIf $modus = 0 then
    $servername = "xxx"
    EndIf
    ;*********************************************************************************************************************************************
    ;********* Modus Produktiv/Test <<ENDE>>
    ;*********************************************************************************************************************************************

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

    ;*********************************************************************************************************************************************
    ;********* System Tray Management <<ANFANG>>
    ;*********************************************************************************************************************************************
    TraySetIcon("Shutdown.ico")

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

    TraySetClick(8) ; nur bei Rechtsklick wird das Menü angezeigt
    TraySetOnEvent(-7, "abort") ; bei Linksklick wird die Gui gezeigt

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

    $tmShutdown = TrayCreateMenu("Shutdown")
    $tms1 = TrayCreateItem("Arbeitsende", $tmShutdown)
    TrayItemSetOnEvent($tms1, "menu_shutdownNow_1")
    $tms2 = TrayCreateItem("Wartung", $tmShutdown)
    TrayItemSetOnEvent($tms2, "menu_shutdownNow_2")
    $tms3 = TrayCreateItem("Problembehebung", $tmShutdown)
    TrayItemSetOnEvent($tms3, "menu_shutdownNow_3")
    $tms4 = TrayCreateItem("Umbau der Hardware", $tmShutdown)
    TrayItemSetOnEvent($tms4, "menu_shutdownNow_4")

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

    TrayCreateItem("")

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

    $tmRestart = TrayCreateMenu("Restart")
    $tmr1 = TrayCreateItem("Wartung", $tmRestart)
    TrayItemSetOnEvent($tmr1, "menu_restartNow_1")
    $tmr2 = TrayCreateItem("Problembehebung", $tmRestart)
    TrayItemSetOnEvent($tmr2, "menu_restartNow_2")

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

    TrayCreateItem("")

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

    $tmLogOff = TrayCreateMenu("Log Off")
    $tml1 = TrayCreateItem("Log Off", $tmLogOff)
    TrayItemSetOnEvent($tml1, "logoff")

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

    TrayCreateItem("")

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

    $tmGUI = TrayCreateMenu("Zeige Grafische Oberfläche (GUI)")
    $tmg1 = TrayCreateItem("GUI Anzeigen", $tmGUI)
    TrayItemSetOnEvent($tmg1, "abort")
    $tmg2 = TrayCreateItem("GUI Verbergen", $tmGUI)
    TrayItemSetOnEvent($tmg2, "gui_verbergen")

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

    if $modus = 1 Then
    TrayCreateItem("")

    $tmGUI = TrayCreateMenu("Exit")
    $tmg1 = TrayCreateItem("Exit", $tmGUI)
    TrayItemSetOnEvent($tmg1, "programExit")
    EndIf

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

    ;*********************************************************************************************************************************************
    ;********* System Tray Management <<ENDE>>
    ;*********************************************************************************************************************************************

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

    ;wenn das Script bereits läuft soll diese Instanz hier beendet werden

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

    If WinExists("IPC Shutdown - Restart") Then
    MsgBox(0, "Shutdown_IPC läuft bereits", "Das Programm Shutdown_IPC läuft bereits. Diese Instanz wird beendet.", 10)
    WriteLog("Das Programm Shutdown_IPC läuft bereits. Diese Instanz wird beendet.")
    Exit
    EndIf

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

    ; Timer initialisieren um Laufzeit bis Netzwerk erreichbar ist an Server zu übermitteln
    sendStartupToServer("Start des Systems")

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

    ;*********************************************************************************************************************************************
    ;********* Main Window <<ANFANG>>
    ;*********************************************************************************************************************************************
    $frmMain = GUICreate("IPC Shutdown - Restart", 600, 375, @DesktopWidth/6, @DesktopHeight/6)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents", $frmMain)
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents", $frmMain)
    GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents", $frmMain)
    GUISetIcon ("Main.ico")
    ;GUISetBkColor(0xE808080)
    WinSetTrans("IPC", "", 220)
    WinSetOnTop("IPC", "", 1)

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

    ;Menü erstellen
    $menuHilfe = GUICtrlCreateMenu ("?")
    $menuHilfeAbout = GUICtrlCreateMenuitem("Über diese Software", $menuHilfe)
    GUICtrlSetOnEvent($menuHilfeAbout, "about")

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

    ;Buttons erstellen
    ;Reihe 1
    $btnShutdown = GUICtrlCreateButton("System Herunterfahren", 50, 50, 225, 225, $BS_BITMAP)
    GUICtrlSetOnEvent($btnShutdown, "system_shutdown")
    GuiCtrlSetImage($btnShutdown, @ScriptDir & "\Herunterfahren.bmp")

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

    $btnRestart = GUICtrlCreateButton("System Neustarten", 325, 50, 225, 225, $BS_BITMAP)
    GUICtrlSetOnEvent($btnRestart, "system_restart")
    GuiCtrlSetImage($btnRestart, @ScriptDir & "\Neustarten.bmp")

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

    $btnExit = GUICtrlCreateButton("Abbruch", 50, 300, 225, 50, $BS_BITMAP)
    GUICtrlSetOnEvent($btnExit, "programHide")
    GuiCtrlSetImage($btnExit, @ScriptDir & "\Exit.bmp")

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

    $btnLogoff = GUICtrlCreateButton("Log Off", 325, 300, 225, 50, $BS_BITMAP)
    GUICtrlSetOnEvent($btnLogoff, "logoff")
    GuiCtrlSetImage($btnLogoff, @ScriptDir & "\Logoff.bmp")

    ;GUISetState(@SW_SHOW)
    ;*********************************************************************************************************************************************
    ;********* Main Window <<ENDE>>
    ;*********************************************************************************************************************************************

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

    ;*********************************************************************************************************************************************
    ;********* Child Window Shutdown <<ANFANG>>
    ;*********************************************************************************************************************************************
    $mdi_shutdown = GUICreate("Shutdown-Dialog", 600, 375, @DesktopWidth/6, @DesktopHeight/6)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents", $mdi_shutdown)
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents", $mdi_shutdown)
    GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents", $mdi_shutdown)
    GUISetIcon ("Shutdown.ico")
    WinSetTrans("Shutdown", "", 220)
    WinSetOnTop("Shutdown", "", 1)

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

    ;Reihe 1
    $btnShutdownNow = GUICtrlCreateButton("System Herunterfahren", 25, 25, 550, 50, $BS_BITMAP)
    GUICtrlSetOnEvent($btnShutdownNow, "shutdownNow")
    GuiCtrlSetImage($btnShutdownNow, @ScriptDir & "\Herunterfahren_breit.bmp")

    $btnAbort = GUICtrlCreateButton("Abbruch", 25, 300, 550, 50, $BS_BITMAP)
    GUICtrlSetOnEvent($btnAbort, "abort")
    GuiCtrlSetImage($btnAbort, @ScriptDir & "\Abbrechen.bmp")
    ;MsgBox(0, "Grund", $btnAbort) ;

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

    ; GROUP WITH RADIO BUTTONS
    $groupShutdown = GuiCtrlCreateGroup("Grund für das Herunterfahren", 300, 95, 270, 185)
    $radioArbeitsende = GuiCtrlCreateRadio("Arbeitsende", 310, 115, 160, 20)
    GuiCtrlSetState(-1, $GUI_CHECKED)
    $radioWartung = GuiCtrlCreateRadio("Wartung", 310, 155, 160, 20)
    $radioProblembehebung = GuiCtrlCreateRadio("Problembehebung", 310, 195, 160, 20)
    $radioUmbauDerHardware = GuiCtrlCreateRadio("Umbau der Hardware", 310, 235, 160, 20)
    GUICtrlCreateGroup ("",-99,-99,1,1) ;close group

    ; Buttons zu Steuerung der Radio-Buttons
    $btnArbeitsende = GUICtrlCreateButton("Arbeitsende", 30, 115, 260, 30)
    GUICtrlSetOnEvent($btnArbeitsende, "grund")
    $btnWartung = GUICtrlCreateButton("Wartung", 30, 155, 260, 30)
    GUICtrlSetOnEvent($btnWartung, "grund")
    $btnProblembehebung = GUICtrlCreateButton("Problembehebung", 30, 195, 260, 30)
    GUICtrlSetOnEvent($btnProblembehebung, "grund")
    $btnUmbauDerHardware = GUICtrlCreateButton("Umbau der Hardware", 30, 235, 260, 30)
    GUICtrlSetOnEvent($btnUmbauDerHardware, "grund")

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

    ;*********************************************************************************************************************************************
    ;********* Child Window Shutdown <<ENDE>>
    ;*********************************************************************************************************************************************

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

    ;*********************************************************************************************************************************************
    ;********* Child Window Restart <<ANFANG>>
    ;*********************************************************************************************************************************************
    $mdi_restart = GUICreate("Restart-Dialog", 600, 375, @DesktopWidth/6, @DesktopHeight/6)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents", $mdi_restart)
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents", $mdi_restart)
    GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents", $mdi_restart)
    GUISetIcon ("Restart.ico")
    WinSetTrans("Restart", "", 220)
    WinSetOnTop("Restart", "", 1)

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

    ;Reihe 1
    $btnRestartNow = GUICtrlCreateButton("System Neustarten", 25, 25, 550, 50, $BS_BITMAP)
    GUICtrlSetOnEvent($btnRestartNow, "restartNow")
    GuiCtrlSetImage($btnRestartNow, @ScriptDir & "\Neustarten_breit.bmp")

    $btnAbort = GUICtrlCreateButton("Abbruch", 25, 300, 550, 50, $BS_BITMAP)
    GUICtrlSetOnEvent($btnAbort, "abort")
    GuiCtrlSetImage($btnAbort, @ScriptDir & "\Abbrechen.bmp")
    ;MsgBox(0, "Grund", $btnAbort) ;

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

    ; GROUP WITH RADIO BUTTONS
    $groupRestart = GuiCtrlCreateGroup("Grund für den Neustart", 300, 95, 270, 185)
    $radioRestartWartung = GuiCtrlCreateRadio("Wartung", 310, 115, 160, 20)
    GuiCtrlSetState(-1, $GUI_CHECKED)
    $radioRestartProblembehebung = GuiCtrlCreateRadio("Problembehebung", 310, 155, 160, 20)
    GUICtrlCreateGroup ("",-99,-99,1,1) ;close group

    ; Buttons zu Steuerung der Radio-Buttons
    $btnRestartWartung = GUICtrlCreateButton("Wartung", 30, 115, 260, 30)
    GUICtrlSetOnEvent($btnRestartWartung, "grund")
    $btnRestartProblembehebung = GUICtrlCreateButton("Problembehebung", 30, 155, 260, 30)
    GUICtrlSetOnEvent($btnRestartProblembehebung, "grund")

    ;*********************************************************************************************************************************************
    ;********* Child Window Restart <<ENDE>>
    ;*********************************************************************************************************************************************

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

    While 1
    Sleep(60000) ; Idle around
    restartNow()
    WEnd

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

    Func system_shutdown()
    GUISetState(@SW_SHOW, $mdi_shutdown)
    GUISetState(@SW_HIDE, $frmMain)
    EndFunc

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

    Func system_restart()
    GUISetState(@SW_SHOW, $mdi_restart)
    GUISetState(@SW_HIDE, $frmMain)
    EndFunc

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

    Func abort()
    ;MsgBox(0, "Grund", @GUI_CTRLID) ;
    GUISetState(@SW_HIDE, $mdi_restart)
    GUISetState(@SW_HIDE, $mdi_shutdown)
    GUISetState(@SW_SHOW, $frmMain)
    GUICtrlSetState($radioArbeitsende, $GUI_CHECKED)
    GUICtrlSetState($radioRestartWartung, $GUI_CHECKED)
    EndFunc

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

    Func programHide()
    GUISetState(@SW_HIDE, $frmMain)
    EndFunc

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

    Func programExit()
    WriteLog("Beginn programExit()")
    exit
    EndFunc

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

    Func logoff()
    WriteLog("Beginn logoff()")
    sendMessageToServer("LogOff")
    Sleep(2000)
    killNetinstaller()
    if $modus = 0 Then
    Shutdown(4)
    EndIf
    EndFunc

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

    Func grund()
    ;MsgBox(0, "Grund", @GUI_CTRLID) ;
    Select
    ;**********************************************************************
    ;**** Shutdown - <<ANFANG>>
    ;**********************************************************************
    Case @GUI_CTRLID = $btnArbeitsende
    GUICtrlSetState($radioArbeitsende, $GUI_CHECKED)
    ;MsgBox(0, "Grund", "Arbeitsende") ;
    Case @GUI_CTRLID = $btnWartung
    GUICtrlSetState($radioWartung, $GUI_CHECKED)
    ;MsgBox(0, "Grund", "Wartung") ;
    Case @GUI_CTRLID = $btnProblembehebung
    GUICtrlSetState($radioProblembehebung, $GUI_CHECKED)
    ;MsgBox(0, "Grund", "Problembehebung") ;
    Case @GUI_CTRLID = $btnUmbauDerHardware
    GUICtrlSetState($radioUmbauDerHardware, $GUI_CHECKED)
    ;MsgBox(0, "Grund", "Umbau der Hardware") ;
    ;**********************************************************************
    ;**** Shutdown - <<ENDE>>
    ;**********************************************************************
    ;**********************************************************************
    ;**** Restart- <<ANFANG>>
    ;**********************************************************************
    Case @GUI_CTRLID = $btnRestartWartung
    GUICtrlSetState($radioRestartWartung, $GUI_CHECKED)
    ;MsgBox(0, "Grund", "Wartung") ;
    Case @GUI_CTRLID = $btnRestartProblembehebung
    GUICtrlSetState($radioRestartProblembehebung, $GUI_CHECKED)
    ;MsgBox(0, "Grund", "Problembehebung") ;
    ;**********************************************************************
    ;**** Restart - <<ENDE>>
    ;**********************************************************************

    EndSelect
    EndFunc

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

    Func shutdownNow()
    WriteLog("Beginn shutdownNow()")
    if GUICtrlRead($radioArbeitsende) = 1 Then
    ; Hier den Shutdown-Code eintragen
    ;MsgBox(0, "Shutdown", "Shutdown - Arbeitsende")
    sendMessageToServer("Shutdown - Arbeitsende")
    ElseIf GUICtrlRead($radioWartung) = 1 Then
    ; Hier den Shutdown-Code eintragen
    ;MsgBox(0, "Shutdown", "Shutdown - Wartung")
    sendMessageToServer("Shutdown - Wartung")
    ElseIf GUICtrlRead($radioProblembehebung) = 1 Then
    ; Hier den Shutdown-Code eintragen
    ;MsgBox(0, "Shutdown", "Shutdown - Problembehebung")
    sendMessageToServer("Shutdown - Problembehebung")
    ElseIf GUICtrlRead($radioUmbauDerHardware)= 1 Then
    ; Hier den Shutdown-Code eintragen
    ;MsgBox(0, "Shutdown", "Shutdown - Umbau")
    sendMessageToServer("Shutdown - Umbau")
    EndIf
    ; Script beenden
    killNetinstaller()
    if $modus = 0 Then
    Run(@ScriptDir & "\Shutdown.exe")
    Exit
    EndIf
    EndFunc

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

    ;*********************************************************************************************************************************************
    ;********* Events für den System Tray <<ANFANG>>
    ;*********************************************************************************************************************************************
    Func menu_shutdownNow_1()
    GUICtrlSetState($radioArbeitsende, $GUI_CHECKED)
    shutdownNow()
    EndFunc

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

    Func menu_shutdownNow_2()
    GUICtrlSetState($radioWartung, $GUI_CHECKED)
    shutdownNow()
    EndFunc

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

    Func menu_shutdownNow_3()
    GUICtrlSetState($radioProblembehebung, $GUI_CHECKED)
    shutdownNow()
    EndFunc

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

    Func menu_shutdownNow_4()
    GUICtrlSetState($radioUmbauDerHardware, $GUI_CHECKED)
    shutdownNow()
    EndFunc

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

    Func menu_restartNow_1()
    GUICtrlSetState($radioRestartWartung, $GUI_CHECKED)
    restartNow()
    EndFunc

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

    Func menu_restartNow_2()
    GUICtrlSetState($radioRestartProblembehebung, $GUI_CHECKED)
    restartNow()
    EndFunc

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

    Func gui_verbergen()
    GUISetState(@SW_HIDE, $frmMain)
    EndFunc
    ;*********************************************************************************************************************************************
    ;********* Events für den System Tray <<ENDE>>
    ;*********************************************************************************************************************************************

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

    Func restartNow()
    WriteLog("Beginn restartNow()")
    if GUICtrlRead($radioRestartWartung) = 1 Then
    ; Hier den Restart-Code eintragen
    ;MsgBox(0, "Shutdown", "Restart - Wartung")
    sendMessageToServer("Restart - Wartung")
    ElseIf GUICtrlRead($radioRestartProblembehebung) = 1 Then
    ; Hier den Restart-Code eintragen
    ;MsgBox(0, "Shutdown", "Restart - Problembehebung")
    sendMessageToServer("Restart - Problembehebung")
    EndIf
    ; Script beenden
    killNetinstaller()
    if $modus = 0 Then
    Run(@ScriptDir & "\Restart.exe")
    Exit
    EndIf
    EndFunc

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

    Func killNetinstaller()
    while ProcessExists("NiInst32.exe")
    ;MsgBox(0, "NiInst32.exe existiert", "NiInst32.exe existiert")
    WriteLog("Netinstaller läuft noch, wird versucht zu beenden")
    ProcessClose("NiInst32.exe")
    ProcessWaitClose("NiInst32.exe")
    WriteLog("Netinstaller wurde beendet")
    Sleep(500)
    WEnd
    EndFunc

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

    Func sendMessageToServer($message)
    TCPStartUp()

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

    ;Test ob der Server erreichbar ist.
    ;==============================================
    dim $reachable = 0
    dim $secondsUntilNoNetwork = 30

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

    while $reachable <= 0
    $reachable = Ping($servername,250)
    Sleep(1000)
    ;Msgbox(0,"Status","Online, roundtrip was:" & $reachable)
    ;wenn der Server nach 30 Sekunden noch nicht erreichbar ist, wird der Vorgang abgebrochen damit das Skript weiter läuft
    $secondsUntilNoNetwork = $secondsUntilNoNetwork -1
    if $secondsUntilNoNetwork = 0 then
    WriteLog("Konnte Server " & $servername & " nicht erreichen")
    ExitLoop
    EndIf
    WEnd

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

    ; Set Some reusable info
    ;--------------------------
    ;Dim $szServerPC = @ComputerName
    Dim $szServerPC = $servername
    ; Set $szIPADDRESS to wherever the SERVER is. We will change a PC name into an IP Address
    Dim $szIPADDRESS = TCPNameToIP($szServerPC)
    ;MsgBox(0, "IP-Adresse", $szIPADDRESS)
    Dim $nPORT = 33891

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

    ; Initialize a variable to represent a connection
    ;==============================================
    Dim $ConnectedSocket = -1

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

    $secondsUntilNoNetwork = 30
    while $ConnectedSocket = -1
    ;Attempt to connect to SERVER at its IP and PORT 33891
    ;=======================================================
    $ConnectedSocket = TCPConnect($szIPADDRESS,$nPORT)
    $secondsUntilNoNetwork = $secondsUntilNoNetwork -1
    if $secondsUntilNoNetwork = 0 then
    WriteLog("Konnte Server " & $servername & " mit TCPConnect nicht verbinden")
    ExitLoop
    EndIf
    WEnd

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

    If @error Then
    ;Message Box deaktiviert
    ;MsgBox(4112,"Error","TCPConnect failed with WSA error: " & @error)
    WriteLog("TCPConnect failed with WSA error: " & @error)
    Else
    $secondsUntilNoNetwork = 30
    $bytesSend = 0
    while $bytesSend = 0
    $bytesSend = TCPSend($ConnectedSocket,$message & @TAB & _GetSysUpTime())
    Sleep(500)
    $secondsUntilNoNetwork = $secondsUntilNoNetwork -1
    if $secondsUntilNoNetwork = 0 then
    WriteLog("Konnte Server " & $servername & " mit TCPSend nichts senden")
    ExitLoop
    EndIf
    WEnd
    if $bytesSend > 0 Then
    WriteLog("TCPSend abgesetzt")
    EndIf
    EndIf

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

    TCPCloseSocket($ConnectedSocket)
    TCPShutdown()
    EndFunc

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

    Func sendStartupToServer($message)
    TCPStartUp()

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

    ; Set Some reusable info
    ;--------------------------

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

    ;Test ob der Server erreichbar ist.
    ;==============================================
    dim $reachable = 0
    dim $secondsUntilNoNetwork = 30

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

    while $reachable <= 0
    $reachable = Ping($servername,250)
    Sleep(1000)
    ;Msgbox(0,"Status","Online, roundtrip was:" & $reachable)
    ;wenn der Server nach 30 Sekunden noch nicht erreichbar ist, wird der Vorgang abgebrochen damit das Skript weiter läuft
    $secondsUntilNoNetwork = $secondsUntilNoNetwork -1
    if $secondsUntilNoNetwork = 0 then
    WriteLog("Konnte Server " & $servername & " nicht erreichen")
    ExitLoop
    EndIf
    WEnd

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

    ;Dim $szServerPC = @ComputerName
    Dim $szServerPC = $servername
    ; Set $szIPADDRESS to wherever the SERVER is. We will change a PC name into an IP Address
    Dim $szIPADDRESS = TCPNameToIP($szServerPC)
    Dim $nPORT = 33891

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

    ; Initialize a variable to represent a connection
    ;==============================================
    Dim $ConnectedSocket = -1

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

    $secondsUntilNoNetwork = 30
    while $ConnectedSocket = -1
    ;Attempt to connect to SERVER at its IP and PORT 33891
    ;=======================================================
    $ConnectedSocket = TCPConnect($szIPADDRESS,$nPORT)
    $secondsUntilNoNetwork = $secondsUntilNoNetwork -1
    if $secondsUntilNoNetwork = 0 then
    WriteLog("Konnte Server " & $servername & " mit TCPConnect nicht verbinden")
    ExitLoop
    EndIf
    WEnd

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

    If @error Then
    WriteLog("TCPConnect failed with WSA error: " & @error)
    ;MsgBox(4112,"Error","TCPConnect failed with WSA error: " & @error)
    Else
    $secondsUntilNoNetwork = 30
    $bytesSend = 0
    while $bytesSend = 0
    $bytesSend = TCPSend($ConnectedSocket,$message & @TAB & _GetSysUpTime())
    Sleep(500)
    $secondsUntilNoNetwork = $secondsUntilNoNetwork -1
    if $secondsUntilNoNetwork = 0 then
    WriteLog("Konnte Server " & $servername & " mit TCPSend nichts senden")
    ExitLoop
    EndIf
    WEnd
    if $bytesSend > 0 Then
    WriteLog("TCPSend StartUp abgesetzt")
    EndIf
    EndIf

    TCPCloseSocket($ConnectedSocket)
    TCPShutdown()
    EndFunc

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

    Func _GetSysUpTime()
    $ret = DllCall("kernel32.dll", "long", "GetTickCount")
    Global $day = 0, $type = "Days", $hour = 0, $min = 0, $sec = 0, $msec = 0, $mtype = "", $stype = "", $mitype = "", $htype = ""

    $msec = StringRight("00" & Mod($ret[0], 1000), 3)
    _Iif($msec > 1, $mtype = "s", $mtype = "")
    $mtype = "Milisecond" & $mtype
    $uptime = Floor($ret[0] / 1000)
    $sec = StringRight("00" & Mod($uptime, 60), 2)
    _Iif($sec > 1, $stype = "s", $stype = "")
    $stype = "Second" & $stype
    If $uptime >= 60 Then
    $uptime = Floor($uptime / 60)
    $min = StringRight("00" & Mod($uptime, 60), 2)
    _Iif($min > 1, $mitype = "s", $mitype = "")
    $mitype = "Minute" & $mitype
    $uptime = Floor($uptime / 60)
    $hour = StringRight("00" & Mod($uptime, 24), 2)
    _Iif($hour > 1, $htype = "s", $htype = "")
    $htype = "Hour" & $htype
    If $uptime >= 24 Then; convert hours to days
    $day = Floor($uptime / 24)
    $type = ""
    If $day > 1 Then $type = "s"
    $type = " Day" & $type & " "
    EndIf
    EndIf

    dim $return = "Laufzeit (D:H:M): " & $day & ":" & $hour & ":" & $min
    Return $return
    EndFunc

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

    Func about()
    MsgBox(0, "About", "Programmiert von Michael Mangelsdorff IT2.1")
    EndFunc

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

    ; Funktion um in das Logfile zu schreiben
    Func WriteLog($text)
    ;MsgBox(0, "Info", $text, 5)
    $fso = FileOpen($logFileName, 1)
    FileWriteLine($fso, _NOW() & @TAB & $text)
    FileClose($fso)
    EndFunc

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

    Func SpecialEvents()
    ;MsgBox(0, "SpecialEvents", @GUI_CTRLID)
    Select
    Case @GUI_CTRLID = $GUI_EVENT_CLOSE
    ;MsgBox(0, "Close Pressed", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
    GUISetState(@SW_HIDE)
    Case @GUI_CTRLID = $GUI_EVENT_MINIMIZE
    ;MsgBox(0, "Window Minimized", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
    Case @GUI_CTRLID = $GUI_EVENT_RESTORE
    ;MsgBox(0, "Window Restored", "ID=" & @GUI_CTRLID & " WinHandle=" & @GUI_WINHANDLE)
    EndSelect
    EndFunc

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

    Func endscript()
    Switch @exitMethod
    Case 0
    WriteLog("Script beendet durch <<" & "Natural Closing>>")
    Case 1
    WriteLog("Script beendet durch <<" & "Close by Exit function>>")
    Case 2
    WriteLog("Script beendet durch <<" & "Close by clicking on exit of the systray>>")
    Case 3
    WriteLog("Script beendet durch <<" & "Close by user logoff>>")
    Case 4
    WriteLog("Script beendet durch <<" & "Close by Windows shutdown>>")
    EndSwitch
    EndFunc

    [/autoit]

    Edit peethebee: Tags korrigiert.

    Einmal editiert, zuletzt von peethebee (2. Februar 2007 um 21:24)

  • Halllo Lefty

    Zitat

    Das Problem das ich habe liegt darin das manche TCPSends verschwinden, das heißt diese nur mit "" (also ohne Inhalt) beim Server ankommt. Hat jemand eine Ahnung woran das liegen kann ?

    wenn nur "" ankommt liegt es daran, dass zwischwen dem Server und dem Client eine Verbindungsfehler vorliegt oder irgendein anderes Problem halt. es wird bei einer fehlfunktion ein @error gesettet der auf Windowsebene exisistiert. Du kannst dir ja ne msgbox erstellen und damit den errorcode auslesen^^ wenn du nicht weißt was der errorcode bedeutet kannst du ihn mir gerne ma schicken hab dafür ei programm find aba die install nicht sonst hätte ich sie angehangen!

    mfg DjBasslord

    PS: das Programm heißt "Error messages for Windows" und ist von Software by design villeicht kannste dir das dann auch downloaden

  • Hallo,

    ersteinmal vielen Dank.

    In Zeile 62 (Server) fange ich doch den @error ab. Wenn dort nichts drin steht, dann erst geht es weiter ... sonst geht es ja aus der Loop raus.

    Der TCPRecv scheint ja erfolgreich zu sein ... nur der Inhalt stimmt nicht (bzw. ist "").

  • :schild4:Oh! Achso ist mit nich aufgefallen war mir ein bisschen zu viel zum lesen!^^
    Naja sonst hab ich keinen Plan wodran es liegen könnte!

    Na dann viel Spaß noch beim tüffteln!!

    Mfg DjBasslord