Problem bei TCP verbindung...

  • Ich habe mir ein kleines ,,ich schik dir ne nachricht" script für ne Lan Party geschrieben.

    allerdings geht es nicht, und ich wollte mal fragen, ob ihr einen Fehler findet...

    Aber bitte nicht vergessen: Ich bin noch Anfänger... Drum bitte noch nicht mich zuposten, warum ich die Dateien nciht zusammenführe um auch ne Antwort zurück schiken zu können....

    Der Sender

    Spoiler anzeigen
    [autoit]


    ;Scripter: Jonathan
    ;auf Grundlage von: DjDominik

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

    HotKeySet("{F1}","senden")
    HotKeySet("{F3}","beenden")
    HotKeySet("{F2}","newip")

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

    func senden()
    $nachricht = InputBox("Nachricht","Gib die Nachricht ein")
    if @error then Exit
    TCPSend($client,"Message|" & $nachricht)
    EndFunc

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

    Func beenden()
    TCPShutdown()
    Exit
    EndFunc

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

    Func newip()
    $client = TCPConnect($ipadresse,1)
    EndFunc

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

    TCPStartup()

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

    $ipadresse = InputBox("IP","An welche IP möchtest du eine Nachricht schiken?")
    if @error then Exit

    Sleep(500)

    $client = TCPConnect($ipadresse,2000)
    MsgBox(0,"Funktionen","F1 = Nachricht Senden F2 = Neue IP-Adresse F3 = Beenden")

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

    while 1
    Sleep(30)
    WEnd

    [/autoit]


    Der Empfänger

    Spoiler anzeigen
    [autoit]


    ;Scripter: Jonathan
    ;auf Grundlage von: DjDominik

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

    HotKeySet("{F4}","beenden")
    Func beenden()
    TCPShutdown()
    Exit
    EndIf
    EndFunc
    TCPStartup()

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

    $socket = TCPListen(@IPAddress1, 2000)
    while 1
    $eingehendenachricht = TCPRecv($socket, 2000)
    If not $eingehendenachricht = "" Then
    $befehl = StringSplit($eingehendenachricht, "|")
    Switch $befehl[0]
    Case "Message"
    MsgBox(64, "Neue Nachricht!", $Kommando[1])
    EndSwitch
    EndIf
    WEnd

    [/autoit]
  • Hier mal ein einfaches Beispiel, ganz einfach gehalten.

    Client
    [autoit]


    ; Client
    ; ======================================================================================

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

    ; HotKeys für die Funktionen
    HotKeySet('{F1}','NeueNachricht')
    HotKeySet('{F2}','IPsetzen')
    HotKeySet('{F3}','ProgrammEnde')

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

    ; Variablen
    Local $ip, $client

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

    ; TCP starten
    TCPStartup()

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

    ; Endlosschleife zum warten
    While 1
    Sleep(100)
    WEnd

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

    ; IP setzen
    Func IPsetzen()
    $ip = InputBox("IP","Server IP:",@IPAddress1)
    EndFunc

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

    ; Das Skript beenden
    Func ProgrammEnde()
    TCPShutdown()
    Exit
    EndFunc

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

    ; Neue Nachricht senden
    Func NeueNachricht()
    $client = TCPConnect(@IPAddress1,65432)
    TCPSend($client,InputBox("Nachricht senden:","Gib deine Nachricht ein:"))
    TCPCloseSocket($client)
    EndFunc

    [/autoit]
    Server
    [autoit]


    ; Server
    ; ======================================================================================

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

    ; Konstanten setzen
    Const $ip = @IPAddress1
    Const $nPort = 65432

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

    ; Variablen
    Local $socket, $ConnectedSocket, $MainSocket,$szIP_Accepted

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

    ; TCP starten
    TCPStartup()

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

    $socket = TCPListen(@IPAddress1,65432)
    If $socket = -1 Then Exit

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

    ; Funktion für das warten auf eine Verbindung
    WarteAufVerbindung()

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

    ; Diese Funktion wartet auf eine neue Verbindung
    Func WarteAufVerbindung()
    $ConnectedSocket = -1
    Do
    $ConnectedSocket = TCPAccept($socket)
    Until $ConnectedSocket <> -1
    EmpfangeNachricht()
    EndFunc

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

    ; Diese Funktion nimmt die Nachricht entgegen und gibt sie aus
    ; anschliessend wartet er wieder auf eine neue Verbindung indem er
    ; wieder die Funktion WarteAufVerbindun aufruft.
    Func EmpfangeNachricht()
    $recv = ''
    while 1
    $recv &= TCPRecv($ConnectedSocket, 2048)
    If @error Then ExitLoop
    WEnd
    MsgBox(64,'',$recv)
    WarteAufVerbindung()
    EndFunc

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

    • Offizieller Beitrag

    Das Server-Script dann aber besser so:

    Spoiler anzeigen
    [autoit]


    ; Server
    ; ======================================================================================

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

    ; Konstanten setzen
    Const $ip = @IPAddress1
    Const $nPort = 65432

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

    ; Variablen
    Local $socket, $ConnectedSocket, $MainSocket, $szIP_Accepted

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

    ; TCP starten
    TCPStartup()

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

    $socket = TCPListen(@IPAddress1, 65432)
    If $socket = -1 Then Exit

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

    ; Funktion für das warten auf eine Verbindung
    While True
    WarteAufVerbindung()
    WEnd

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

    ; Diese Funktion wartet auf eine neue Verbindung
    Func WarteAufVerbindung()
    $ConnectedSocket = -1
    Do
    $ConnectedSocket = TCPAccept($socket)
    Until $ConnectedSocket <> -1
    EmpfangeNachricht()
    EndFunc ;==>WarteAufVerbindung

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

    ; Diese Funktion nimmt die Nachricht entgegen und gibt sie aus
    Func EmpfangeNachricht()
    $recv = ''
    While 1
    $recv &= TCPRecv($ConnectedSocket, 2048)
    If @error Then ExitLoop
    WEnd
    MsgBox(64, '', $recv)
    EndFunc ;==>EmpfangeNachricht

    [/autoit]


    Ansonsten wird irgendwann die max. Rekursiontiefe erreicht und das Script beendet sich.

  • Zitat

    Rekursionstiefe

    Mit Rekursionstiefe bezeichnet man die Verschachtelungstiefe rekursiver Aufrufe.
    Eine rekursive Prozedur ruft sich beim Ablauf selber auf, berechnet etwas, ruft sich wieder selber auf, berechnet etwas, ruft sich wieder selber auf usw. Die Anzahl, mit der sich die Funktion selber aufruft, wird als Rekursionstiefe bezeichnet.

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Das hier geht an "McPoldy und Oscar"

    Ihr Schriebt den Anfang so :

    Spoiler anzeigen
    [autoit]


    Const $ip = @IPAddress1
    Const $nPort = 65432

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

    ; Variablen
    Local $socket, $ConnectedSocket, $MainSocket,$szIP_Accepted

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

    ; TCP starten
    TCPStartup()

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

    $socket = TCPListen(@IPAddress1,65432)

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

    Also ich meine ihr gebt der Variabel

    [autoit]

    $ip

    [/autoit]

    den Wert

    [autoit]

    @IPAddress1

    [/autoit]


    Verwendet aber bei TCPListen nicht die Variabel sondern wieder

    [autoit]

    @IPAddress1

    [/autoit]

    .

    Warum schreibt ihr nicht Direkt so :

    Spoiler anzeigen
    [autoit]


    Const $ip = @IPAddress1
    Const $nPort = 65432

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

    ; Variablen
    Local $socket, $ConnectedSocket, $MainSocket,$szIP_Accepted

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

    ; TCP starten
    TCPStartup()

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

    $socket = TCPListen($ip,65432)

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

    Nicht böse Nehmen, Ist mir gerade nur Aufgefallen!