net.exe bzw. Net Send Starten

  • Indem man meine Version der IP-Auswahl nimmt (oder direkt @IP-Adress1 nimmt), damit funktioniert es auf jeden Fall im LAN vorausgesetzt die Firewall blockiert nicht.


    Du wählst die IP aus

    [autoit]


    $inetIP = _GetIP()
    $COmboIP = GUICtrlCreateCombo( $inetIP , 10, 10)
    GUICtrlSetData(-1, @IPAddress1 & '|' & @IPAddress2 & '|' & @IPAddress3 & '|' & @IPAddress4, @IPAddress1)
    .....................
    $IP = GUICtrlRead ($ComboIP)

    [/autoit]

    als Modem-Nutzer kannste hier deine Internet-IP auswählen und alle anderen wählen die IP von der Netzwerk-Karte die mit dem Router verbunden ist.

    Wenn es bei nem Router-Nutzer auch übers Internet funktionieren soll muss der in seinem Router einstellen (lassen) das Anfragen die aus dem Internet auf den Port eingehen an den bestimmten Rechner weitergeleitet werden auf dem der Server läuft.


    Das lässt sich in AutoIt nicht machen. Port-Weiterleitungen müssen auf dem Router eingestellt werden (meistens über ne Web-Oberfläche) was dazu genau gemacht werden hängt vom Router ab. Wer nicht weiß wie er vorgehen muss kann sich mal bei portforward umschaun die haben sehr viele Modelle und ausführliche Anleitungen.

  • So, oder wie?

    Server
    [autoit]

    #include <INet.au3>
    #include <GuiEdit.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $inetIP = _GetIP()
    #Region ### START Koda GUI section ### Form=
    $IPForm = GUICreate("Form2", 151, 52, 303, 219)
    $ComboIP = GUICtrlCreateCombo("", 3, 3, 145, 25)
    If @IPAddress1 <> "0.0.0.0" Then
    If @IPAddress2 <> "0.0.0.0" Then
    If @IPAddress3 <> "0.0.0.0" Then
    If @IPAddress4 <> "0.0.0.0" Then
    GUICtrlSetData(-1, @IPAddress1 & '|' & @IPAddress2 & '|' & @IPAddress3 & '|' & @IPAddress4, @IPAddress1)
    Else
    GUICtrlSetData(-1, @IPAddress1 & '|' & @IPAddress2 & '|' & @IPAddress3, @IPAddress1)
    EndIf
    Else
    GUICtrlSetData(-1, @IPAddress1 & '|' & @IPAddress2, @IPAddress1)
    EndIf
    Else
    GUICtrlSetData(-1, @IPAddress1 , @IPAddress1)
    EndIf
    EndIf
    $OK = GUICtrlCreateButton("OK", 72, 25, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $OK
    GUISetState (@SW_HIDE)
    ExitLoop
    EndSwitch
    WEnd

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

    $IP = GUICtrlRead ($ComboIP)
    Dim $ConnectedSocket[9999999]
    $zahl = -1
    $zahl1 = $zahl + 1
    $MainSocket = TCPListen($IP, 31758)
    If $MainSocket = -1 Then Exit
    While 1
    $ConnectedSocket[$zahl1] = TCPAccept($MainSocket)
    If $ConnectedSocket[$zahl1] >= 0 Then
    $zahl = $zahl + 1
    $zahl1 = $zahl + 1
    ;~ TCPSend ($ConnectedSocket[$zahl],"zahl" & "|" & $zahl)
    EndIf
    If $zahl >= 0 Then
    For $1 = 0 To $zahl
    $Empfang = TCPRecv($ConnectedSocket[$1], 9999)
    If $Empfang <> "" Then
    ;~ $sEmpfang = StringSplit($Empfang, "<>")
    For $2 = 0 To $zahl
    ;~ If $sEmpfang[1] <> $2 Then
    TCPSend($ConnectedSocket[$2], $Empfang)
    ;~ EndIf
    Next
    EndIf
    Next
    EndIf
    WEnd

    [/autoit]
    Client
    [autoit]

    #include <INet.au3>
    $IP = InputBox("INC", "Die IP des Servers", _GetIP())
    $Port = 31758
    $ConnectedSocket = TCPConnect($IP, $Port)
    If $ConnectedSocket = -1 Then
    MsgBox(16, "Error", "Es ist bei dem Verbindungsversuch ein Fehler aufgetreten, vermutlich ist kein Server gestartet!")
    Exit
    EndIf
    HotKeySet("^s", "_Senden")
    While 1
    $Empfang = TCPRecv($ConnectedSocket, 9999)
    If $Empfang <> "" Then
    MsgBox(0, "Nachricht", $Empfang)
    EndIf
    WEnd
    Func _Senden()
    $Nachricht = InputBox("Nachricht senden", "Schreibe deine Nachricht")
    If $Nachricht <> "" Then
    TCPSend($ConnectedSocket, $Nachricht)
    EndIf
    EndFunc ;==>_Senden

    [/autoit]

    mfg. Jam00

  • Hattest du (unnötigerweise) was am Client geändert ?

    Also beim Server bis auf die InetIP in Zeile 7 (die kannste löschen) siehts ganz gut aus.
    Was zeigt der bei dir eigentlich für IP(s) an ?

  • Ne, ich hab am Client nix Geänder! Stimmt Zeile 7 ist geändert, wieso willst du wissen welche IP's der bei mir anzeigt? Eben die con meinem DSL-Modem und die von meinem Computer, also geht das jetzt bei euch?

    mfg. Jam00

  • Jep läuft.

    Zitat

    ieso willst du wissen welche IP's der bei mir anzeigt? Eben die con meinem DSL-Modem und die von meinem Computer


    dat wollte ich bloß wissen

  • Gut :thumbup: , dann muss ich das jetzt bei allen Servern ändern! Aber ich glaube, ich mach das so, das er nacheinander versucht sich mit den IP zu verbinden, und wenn es nicht geht, mit der nägsten!

    mfg. Jam00

  • Ich find auswählen halt besser, da ja nur der User selbst weiß über welche Karte er ins Netz geht. Für User die in 2 oder mehr Netzen unterwegs sind.

    Was du aber mal ausprobieren könntest ist als IP 0.0.0.0 oder gar nix anzugeben dann bindet er sich an alles was er findet. Mit nix angeben hat es vorhin bei meinem funktioniert allerdings hab ich auch Client und Server auf dem gleichen PC laufen gehabt.

  • Solange der Client weiß wo er hin muss ist das egal und der Server wäre aus allen Netzen erreichbar. Nehmen wir mal einen Rechner mit Modem fürs Internet und Netzwerk-Karte fürs lokale Netze, dann könnte man von beiden Netzen aus auf den Server rauf.

  • So, jetzt hab ich es fertig, und es geht!

    Server
    [autoit]

    #include <INet.au3>
    #include <GuiEdit.au3>
    Global $sNamen
    $zahl = -1
    $zahl1 = $zahl + 1
    $File = @ScriptDir & "\Server.ini"
    FileDelete($File)
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    ;~ Opt("TrayMenuMode",1)

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

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Serververlauf", 238, 201, 303, 219)
    $Edit1 = GUICtrlCreateEdit("", 3, 3, 232, 196, $ES_READONLY+$ES_AUTOHSCROLL)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    #EndRegion ### END Koda GUI section ###
    $Fenster = False
    Dim $ConnectedSocket[999999]
    Dim $Namen[999999]
    ; Startet den TCP Service
    ;==============================================
    TCPStartup()

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

    ; Erstellt einen lauschenden "SOCKET"
    ;==============================================
    $MainSocket = TCPListen(@IPAddress1, 31758)
    If $MainSocket > -1 Then
    MsgBox (0,"","Die Server-Ip ist: " & @IPAddress1)
    EndIf
    If $MainSocket = -1 Then
    $MainSocket = TCPListen(@IPAddress2, 31758)
    If $MainSocket > -1 Then
    MsgBox (0,"","Die Server-Ip ist: " & @IPAddress2)
    EndIf
    EndIf
    If $MainSocket = -1 Then
    $MainSocket = TCPListen(@IPAddress3, 31758)
    If $MainSocket > -1 Then
    MsgBox (0,"","Die Server-Ip ist: " & @IPAddress3)
    EndIf
    EndIf
    If $MainSocket = -1 Then
    $MainSocket = TCPListen(@IPAddress4, 31758)
    If $MainSocket > -1 Then
    MsgBox (0,"","Die Server-Ip ist: " & @IPAddress4)
    EndIf
    EndIf
    If $MainSocket = -1 Then MsgBox (16,"Error","Es ist ein Verbindungsfehler aufgetreten!")Exit
    HotKeySet("!{n}", "_Fenster")
    ; Warten auf eine Client-Verbindung
    ;--------------------

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE)
    EndSwitch
    $ConnectedSocket[$zahl1] = TCPAccept($MainSocket)
    If $ConnectedSocket[$zahl1] >= 0 Then
    $zahl = $zahl + 1
    $zahl1 = $zahl + 1
    ;~ MsgBox(0, "", "Mein Server - Client verbunden", 1)
    $Erhalten = TCPRecv($ConnectedSocket[$zahl], 2048)
    $sErhalten = StringSplit($Erhalten, ",")
    If $sErhalten[1] = "Name" Then
    $Namen[$zahl] = $sErhalten[2]
    ElseIf $sErhalten[1] = "NamenSenden" Then
    $zahl = $zahl - 1
    For $E = 0 To $sErhalten[2]
    $E1 = $E + 3
    $Namen[$E] = $sErhalten[$E1]
    Next
    $Status = False
    For $F = 0 To $sErhalten[2]
    $F1 = $sErhalten[2] + 1
    $F2 = $F - 1
    If $F = $sErhalten[$F1] Then $Status = True
    If $Status = True Then
    $ConnectedSocket[$F] = $ConnectedSocket[$F2]
    EndIf
    Next
    EndIf
    $sNamen = ""
    For $B = 0 To $zahl
    $sNamen = $sNamen & $Namen[$B] & "|"
    Next
    For $C = 0 To $zahl
    TCPSend($ConnectedSocket[$C], "Namen|" & $zahl & "|" & $sNamen)
    Next
    EndIf
    For $A = 0 To $zahl
    $Erhalten = TCPRecv($ConnectedSocket[$A], 9999)
    $sErhalten = StringSplit($Erhalten, ",")
    If $Erhalten <> "" Then
    $Edit1Read = GUICtrlRead($Edit1)
    GUICtrlSetData($Edit1, $Edit1Read & @CRLF & $Erhalten)
    $Lines = _GUICtrlEdit_GetLineCount($Edit1)
    _GUICtrlEdit_LineScroll($Edit1, 0, $Lines)
    For $D = 0 To $zahl
    If $sErhalten[1] = "Name" Then
    $Namen[$zahl] = $sErhalten[2]
    ElseIf $sErhalten[1] = "Nachricht" Then
    ;~ MsgBox (0,"",$Namen[$D] & "," & $sErhalten[3])
    If $Namen[$D] = $sErhalten[3] Then
    TCPSend($ConnectedSocket[$D], $Erhalten)
    EndIf
    EndIf
    Next
    EndIf
    Next
    WEnd
    Func _Fenster()
    If $Fenster = True Then
    GUISetState(@SW_HIDE)
    ElseIf $Fenster = False Then
    GUISetState(@SW_SHOW)
    EndIf
    EndFunc ;==>_Fenster

    [/autoit]

    mfg. Jam00

  • Ich denke mal anders rum wäre sinnvoller denn wenns kein @IP-Adress1 gibt, dann gibts erst recht kein 2,3 oder 4 behaupte ich mal.

  • Hallo vor allem die ohne LAN-Anschluss und die DHCP-konfigurierten denen man das Kabel raus gezogen wird. :P

    Zitat

    Hallo, jeder computer hat eine IP-Adresse!


    Darauf wollte ich ja hinaus denn diese Adresse steht immer in IP-Adress1 deshalb brauchst du den Rest nicht mehr prüfen, denn bis dahin wird er nicht kommen.