Klappt das so?

  • Nabend, hab ja heut wieder viele Fragen xD
    Also, hab en Miniscript gemacht.
    Es soll auf meinem und dem PC von nem Kumpel laufen.
    Also, wenn der andere den PC anmacht, sollen sich 2 scripte öffnen.
    Z.B. bei PC1 soll dieses script laufen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Global $IP = "192.168.1.3"

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Server", 365, 51, 193, 125)
    $Label1 = GUICtrlCreateLabel("", 8, 8, 346, 33)
    GUICtrlSetFont(-1, 18, 800, 4, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    TCPStartup ()
    $MainSocket = TCPListen ($IP, 56000, 100)
    AdlibEnable ("_Check", 1000)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _Check ()
    If $MainSocket = -1 Then
    GUICtrlSetData ($Label1, "Warte auf verbindungsaufbau.")
    Else
    GUICtrlSetData ($Label1, "Verbindung hergestellt.")
    EndIf
    EndFunc

    [/autoit]

    Beim PC2 soll dann dieses script angehn, wenn er den PC anmacht.

    Spoiler anzeigen
    [autoit]

    $IP = "192.168.1.3"

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

    TCPStartUp()

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

    $socket = TCPConnect( $IP, 56000)
    If $socket = -1 Then
    Exit
    Else
    While 1
    Sleep (100)
    WEnd
    EndIF

    [/autoit]

    Der Server soll sozusagen darauf warten, dass der Client an geht, und dann das Label in Verbindung hergestellt ändern.

    Jetz hab ich grad kein 2ten PC da zum testen, deshalb wollt ich mal fragen, ob das so gehn würde?

  • Das wird nicht klappen ...

    [autoit]

    AdLibEnable ( "_Check" , ;!;1000;!;)

    [/autoit]


    Das ist Fehler Nummer 1

    So würde das gehen :

    Spoiler anzeigen
    [autoit]

    TCPStartup ()
    $MainSocket = TCPListen ($IP, 56000, 100)
    Do
    $ConnectedSocket = TCPAccept ( $MainSocket )
    Until $ConnectedSocket <> -1

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

    _Hergestellt () ; Funktion zum Erstellen des Labels

    [/autoit]

    Hoffe ich konnte dir helfen :)

  • Eine kurze Frage an dich NoF@ker.
    Warum ist die Adlibenable Funktion flasch?
    Meines Wissens nach sind alle Funktionsparameter richtig?!

  • ja falsch ist das nicht :P , aber es wird nicht funktionieren da er so nur jede Sekunde einen einkommende Verbindungsanfrage annimmt wodurch die Chance ziemlich klein wird dass das Skript genau zu dieser Zeit connecten will [ Chance : 1:1000] . Und wenn du das testen willst probiere es mit deiner eigenen IP aus .

  • hi
    das geht ja gerade nur mit festen ips kann man das gleiche auch mit veränderbaren Ips machen?

  • Ups ^^ stimmt ja, da hab ich garnet mehr dran gedacht. :huh:
    Werds gleich mal probiern, thx

  • jo das ist grad auch mein Problem :D
    aber ich hab grad keine ahnung wie man das machen soll :rolleyes:

  • eh ja schon würds aber gern haben das es mit veränderbaren ips funzen würde ,da ich sonst probleme mit der verbindung mit dem i-net habe :D gibs da keine möglichkeit :?:

  • mhh, gute frage, müsste sich Oscar mal melden, ich glaub der weis wie das geht...

  • Hi,
    hab mal was auf die Schnelle gebastelt:

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <String.au3>
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    MsgBox(0, 0, _GetIP_FromName("www.autoit.de"))

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

    Func _GetIP_FromName($hostname) ;Rückgabe: bei Erfolg die IP, bei Fehler -1
    Local $console = Run(@ComSpec & " /c ping " & $hostname, @ScriptDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line
    While 1
    $line &= StdoutRead($console)
    If @error Then ExitLoop
    WEnd
    ;msgbox(0,0,$line)
    $ip = _StringBetween($line, "[", "]") ;regex folgt^^
    if @error then
    return -1
    else
    Return $ip[0]
    endif
    EndFunc ;==>_GetIP_FromName

    [/autoit]


    Richtet euch kostenlos bei z.B. https://autoit.de/www.dyndns.com einen Hostnamen ein und tragt diesen in euren Router ein. Anleitung dazu z.B. hier
    Jedes Mal, wenn ihr eine neue IP zugewiesen bekommt, überträgt der Router den Namen und die neue IP an den DNS. Somit seid ihr jederzeit unter eurem Hostnamen und eurer IP zu erreichen.
    D.H. im konkreten Fall, da du nicht auf den Rechner deines Freundes pingen kannst (weisst ja die IP nicht), musst du statt der IP mit dem HOSTNAMEN pingen. Ping macht auch eine Namensauflösung, so erhält man die IP des gegenübers und kann in Autoit loslegen.

    *edit*
    Bei der Client/Serve-Anwendung die Portweiterleitung und Löcher in die Firewall bohren nicht vergessen, auch PING darf nicht durch die Firewall geblockt werden.

    viel Spass
    Andy

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (24. Juni 2009 um 23:16)

  • Ich will kein extra Thema aufmachen, aber wie prüft man ob eine bereits erstellte TCP Verbindung noch besteht?
    Ich dachte mir mit 32B-Packets.
    Aber vielleicht gehts ja noch einfacher?

    Mit

    [autoit]


    Ping

    [/autoit]


    habe ich es probiert, macht aber auch keinen Sinn da der Rechner angepingt wird und nicht die Verbindung.