Probleme mit Server u. Client

  • Also, ich hab einen Server und einen Clienten (nur Beispiele).

    Ich möchte, dass wenn mein client shutdown sendet, dass dann der Pc mit dem Server herunterfährt.

    Ich bin mir komplett unsicher, welchen Befehl ich in dem Zusammenhang wie einsetzen kann.


    Serverbsp.:


    server:

    [autoit]


    $IP = "222.222.22.2" ;Ip

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

    $port = 21 ;Port

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

    TCPStartUp()

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

    $connection = TCPListen($IP, $port)

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

    $Connectionaccept = TCPAccept($connection)

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

    $recv = TCPRecv($Connectionaccept, 2048)

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

    While 1

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

    If $recv = "Shutdown" Then Shutdown(1)

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

    Wend

    [/autoit]


    Ich bedank mich schonmal für eure Hilfe.

    2 Mal editiert, zuletzt von Mirko96 (12. März 2012 um 21:34)

  • Client Bsp.:

    [autoit]


    $IP = "222.222.22.2" ; IP
    TCPStartUp()
    $connect = TCPConnect( $IP, 21 )
    TCPSend(, "Shutdown")

    [/autoit]

    2 Mal editiert, zuletzt von Mirko96 (12. März 2012 um 21:35)

  • Als erstes mal: Dein Client beendet sich sofort wieder, das heißt der Server hat nur eine kurze Zeit die Verbindung anzunehmen. Doch du versuchst auch nur einmal die Verbindung anzunehmen (TCPAccept).
    Du musst in einer Schleife solange prüfen bis TCPAccept <> -1 ist, dann hat sich jmd angemeldet und du kannst in annehmen. Dann speicherst du dir die Socket ID zum Client ab (In einem Array oder sowas) und so kannst du immer mit dem Client kommunizieren.

    kleines Beispiel (Aus dem Kopf! Kann Fehler enthalten!)
    CLIENT:

    [autoit]

    TCPStartup()
    $Socket = TCPConnect (IP, Port)
    TcpSend ($Socket, "String")

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

    While Sleep (500)

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

    Wend
    TCPShutdown()

    [/autoit]

    SERVER:

    [autoit]

    TCPStartup()
    $Socket = TCPListen(IP, PORT)
    Do
    $clientSocketID = TCPAccept ($Socket)
    Until $clientSocketID <> -3

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

    Do
    $recv=TCPRecv ($clientSocketID, 1024)
    Until $recv <> ""
    MsgBox (0, "", $recv)

    [/autoit]

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Dann lernst du aber nix ;)
    Und das was du vor hast sieht für mich leicht aus wie ein "Spaßvirus" der den Comp von jmd runterfährt wenn dus willst. Aber das hab ich nicht zu entscheiden.

    Ich kann dir nur nochmal, wie alle anderen auch, den Tipp geben in die Hilfe zu schauen und die Beispiele durchzulesen. Da erfährst du alles wichtige, wie man Sendet, Empfängt etc.

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Ne, das waren ja nur Beispiele, ich schreib keinen Spaßvirus sondern eher ein kleines Netzwerk, das in erster Linie der Synchronisierung von mehreren Pcs dient, der Pc mit dem Client is halt der Hauptrechner.Zusätzlich : Danke, dass du mit deiner Entscheidung meinen Lernerfolg steigern willst, aber ich hab für sowas im Moment keine Zeit, ich bin ein bissle unter Zeitdruck.

  • Einfach eine Abfrage wie...

    [autoit]

    If $recv = "Shutdown" Then Shutdown(1)

    [/autoit]

    ...z.B.?;)

    lg chess

    Edit:
    Aus der Hilfe geklaut und verändert;)

    Server
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)

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

    ;==============================================
    ;==============================================
    ; SERVER!! Startet mich zuerst !!!!!!!!!!!!!!!
    ;==============================================
    ;==============================================

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

    Example()

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

    Func Example()
    ; Richte einige wiederverwendbare Informationen ein.
    ; Richte deine öffentliche IP Adresse (@IPAddress1) hier ein.
    ; Local $szServerPC = @ComputerName
    ; Local $szIPADDRESS = TCPNameToIP($szServerPC)
    Local $szIPADDRESS = @IPAddress1
    Local $nPORT = 33891
    Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
    Local $msg, $recv

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

    ; Startet den TCP Service
    ;==============================================
    TCPStartup()

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

    ; Erstellt einen lauschenden Port.
    ; Benutzt deine IP Adresse und den Port 33891. (Oben angegeben)
    ;==============================================
    $MainSocket = TCPListen($szIPADDRESS, $nPORT)

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

    ; Wenn die Socketerstellung fehl schlägt, dann wird das Programm beendet.
    If $MainSocket = -1 Then Exit

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

    ; Erstellt eine GUI für Messages.
    ;==============================================
    $GOOEY = GUICreate("Mein Server (IP: " & $szIPADDRESS & ")", 300, 200)
    $edit = GUICtrlCreateEdit("", 10, 10, 280, 180)
    GUISetState()

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

    ; Initialisiert eine Variable um eine Verbindung anzugeben
    ;==============================================
    $ConnectedSocket = -1

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

    ; Wartet auf und akzeptiert eine Verbindung
    ;==============================================
    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1

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

    ; Bekommt die IP des verbundenen Clients
    $szIP_Accepted = SocketToIP($ConnectedSocket)

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

    ; GUI Message Schleife
    ;==============================================
    While 1
    $msg = GUIGetMsg()

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

    ; GUI beendet
    ;--------------------
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop

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

    ; Versucht Daten zu empfangen, bis zu 2048 bytes
    ;----------------------------------------------------------------
    $recv = TCPRecv($ConnectedSocket, 2048)

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

    If $recv = "shutdown" Then Shutdown(1)
    ; Wenn der Empfang mit @error fehlschlägt, dann hat sich der Socket getrennt.
    ;----------------------------------------------------------------
    If @error Then ExitLoop

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

    ; Aktualisiert das Input-Control mit dem, was wir empfangen haben.
    ;----------------------------------------------------------------
    If $recv <> "" Then GUICtrlSetData($edit, _
    $szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
    WEnd

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

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

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

    TCPShutdown()
    EndFunc ;==>Example

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

    ; Funktion um die IP Adresse eines verbundenen Sockets wiederzugeben.
    ;----------------------------------------------------------------------
    Func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet

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

    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")

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

    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
    "ptr", DllStructGetPtr($sockaddr), "int*", 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

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

    $sockaddr = 0

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

    Return $aRet
    EndFunc ;==>SocketToIP

    [/autoit]
    Client
    [autoit]


    Opt('MustDeclareVars', 1)

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

    ;==============================================
    ;==============================================
    ; CLIENT! Startet mich, nachdem der Server gestartet wurde!!!!!!!!!!!!!!!
    ;==============================================
    ;==============================================

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

    Example()

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

    Func Example()
    ; Richte einige wiederverwendbare Informationen ein.
    ;--------------------------
    Local $ConnectedSocket, $szData
    ; Set $szIPADDRESS Wir ändern den PC-Namen in eine IP-Adresse.
    ; Local $szServerPC = @ComputerName
    ; Local $szIPADDRESS = TCPNameToIP($szServerPC)
    Local $szIPADDRESS = @IPAddress1
    Local $nPORT = 33891

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

    ; Startet den TCP Service
    ;==============================================
    TCPStartup()

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

    ; Initialisiert eine Variable, um eine Verbindung anzugeben.
    ;==============================================
    Dim $ConnectedSocket = -1

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

    ; Versucht, zu einem Server mit der IP und dem PORT 33891 zu verbinden.
    ;=======================================================
    $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)

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

    ; Falls es einen Fehler gibt, wird er angezeigt
    If @error Then
    MsgBox(4112, "Fehler", "TCP-Connect schlug mit folgendem WSA-Fehler fehl: " & @error)
    ; Wenn es keinen Fehler gibt, dann erscheint wiederholt eine Inputbox zur Eingabe von Daten, die zum Server gesendet werden sollen.
    Else
    ; Fragt fortwährend nach Daten, die zum Server gesendet werden sollen.
    While 1
    ; InputBox für die zu versendenden Daten
    $szData = InputBox("Daten für den Server", @LF & @LF & "Gib Daten ein, die zum Server transferiert werden sollen:")

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

    ; Wenn die Inputbox geschlossen wird oder leer bleibt, wird die Schleife beendet.
    If @error Or $szData = "" Then ExitLoop

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

    ; Wir sollten Daten in $szData haben... Lasst uns versuchen, sie durch unseren verbundenen Socket zu versenden.
    TCPSend($ConnectedSocket, $szData)

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

    ; Wenn das Senden mit @error fehlgeschlagen ist, dann ist der Socket getrennt.
    ;----------------------------------------------------------------
    If @error Then ExitLoop
    WEnd
    EndIf
    EndFunc ;==>Example

    [/autoit]

    Musst halt nur an die jeweilige IP anpassen, das kann man wirklich nicht für dich erledigen:P