Tcp Server Fehler

  • Hi @all
    Ich habe mal einen Tcp chat gemacht mit Server und Client bei mir am computer geht er einwandfrei bei einem freund von mir schaltet sich der server nach dem starten gleich wieder ab

    Server:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>

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

    Global $MainSocket

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

    Dim $szIPADDRESS = ; hab ich entfernt
    Dim $nPORT = ; hab ich auch entfernt

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

    TCPStartUp()

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

    $MainSocket = TCPListen($szIPADDRESS, $nPORT,2)

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

    Dim $ConnectedSocket = -1

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

    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1

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

    Dim $szIP_Accepted = SocketToIP($ConnectedSocket)
    Dim $msg, $recv

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

    While 1
    $name = TCPRecv($ConnectedSocket,2048)
    If @error Then ExitLoop
    If $name <> "" Then
    TcpSend($ConnectedSocket,$name)
    Endif
    WEnd

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

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

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

    TCPShutDown()

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

    nur woran liegt das

    Ich hoffe ihr könnt mir helfen

    PS: an der ip und dem port kann es ja nicht leigen wenn es schon definiert ist und meine eigene ist oder ?

  • Hallo,

    Zitat

    nur woran liegt das

    Diese Frage könntest du (und viele andere deiner Kollegen mit derselben Frage) dir sparen, wenn du dein Script mit Debug-Ausgaben und/oder Error-Abfragen spicken würdest.
    Wie so etwas aussehen könnte...

    Spoiler anzeigen
    [autoit]


    TCPStartup()
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : TCPStartup() = ' & TCPStartup() & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $MainSocket = TCPListen(@IPAddress1, 33891, 100 )

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

    While 1
    while 1
    $ConnectedSocket = TCPAccept($MainSocket)
    msgbox(0,"Server empfängt",$ConnectedSocket,1)
    If $ConnectedSocket <> -1 Then ExitLoop
    Sleep(100)
    WEnd
    msgbox(0,"Server verbindung aufgebaut",0,1)
    TCPSend($ConnectedSocket,"1")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : TCPSend($ConnectedSocket,"1") = ' & TCPSend($ConnectedSocket,"1") & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ;msgbox(0,"Server sendet",0)
    Do
    $recv = TCPRecv($ConnectedSocket, 2048)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : TCPRecv($ConnectedSocket, 2048) = ' & TCPRecv($ConnectedSocket, 2048) & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    Sleep(100)
    Until $recv <> ""

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

    $empfang = StringSplit($recv,"#")
    msgbox(0,"server hat empfangen:",$recv)

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

    WEnd
    TCPShutdown()

    [/autoit]


    Client dazu

    Spoiler anzeigen
    [autoit]

    Func _GetMACFromIP($sIP=@IPAddress1, $mode = 1)
    Local $MAC, $MACSize
    Local $i, $s, $r, $iIP
    $MAC = DllStructCreate("byte[6]")
    $MACSize = DllStructCreate("int")
    DllStructSetData($MACSize, 1, 6)
    $r = DllCall("Ws2_32.dll", "int", "inet_addr", _
    "str", $sIP)
    $iIP = $r[0]
    $r = DllCall("iphlpapi.dll", "int", "SendARP", "int", $iIP, "int", 0, "ptr", DllStructGetPtr($MAC), "ptr", DllStructGetPtr($MACSize))
    $s = ""
    If $mode = 0 Then
    For $i = 0 To 5
    $s &= Hex(DllStructGetData($MAC, 1, $i + 1), 2)
    Next

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

    ElseIf $mode = 1 Then
    For $i = 0 To 5
    If $i Then $s = $s & ":"
    $s = $s & Hex(DllStructGetData($MAC, 1, $i + 1), 2)
    Next
    ElseIf $mode = 2 Then
    For $i = 0 To 5
    If $i Then $s = $s & "-"
    $s = $s & Hex(DllStructGetData($MAC, 1, $i + 1), 2)
    Next
    EndIf
    Return $s
    EndFunc

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

    Do
    Local $macadresse = ""
    $macadresse = _GetMACFromIP()
    Until $macadresse <> ""

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

    $text = @IPAddress1 & "#" & $macadresse & "#" & @ComputerName

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

    $Empfaenger_IP = @ipaddress1
    $Port = 33891

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

    TCPStartUp()
    $ConnectedSocket = TCPConnect($Empfaenger_IP, $Port)
    msgbox(0,@error,$text)
    Do
    $recv = TCPRecv($ConnectedSocket, 2048)
    Sleep(100)
    Until $recv <> ""
    TCPSend($ConnectedSocket, $text)
    Sleep(2000)

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

    TCPShutdown ()

    [/autoit]


    mit Alt-D (consolewrite) oder Ctrl-Shift-D (Messagebox) bringt man die debugzeilen ins script, nach dem Testen einfach mit Ctrl-Alt-Z alle Debuglines entfernen

    ciao
    Andy

  • Nen Client habe ich schon und es wird auch kein fehler ausgegeben
    bei mir zuhause läuft er auchnu bei meinem freund nicht
    kann es daran liegen dass ich die ip vordefiniert habe?

    • Offizieller Beitrag

    Hast du eine Feste IP-Addresse? Eventuell hat sich die IP ja gewechselt.Wie sieht das mit der Firewall bei deinem Freund aus? Ist der Port freigegeben und wie sieht es mit deiner Firewall aus? Netzwerkintern funzt das meistens.

  • Meine eigene ip ist fest und die habe ich als ip für das tcp verwendet
    wie kann ich prüfen ob der port freigegeben ist ?

  • Was ich immer noch nicht verstanden habe...
    WO TRITT DER FEHLER AUF?
    Wir können hier stundenlang rumraten, nur weil du nicht in der Lage bist anzugeben, in welcher Zeile dein Script nicht tut was es soll...
    Das ist ein gut gemeinter Rat, denn mit "funktioniert nicht, woran liegts?" disqualifizierst du dich schon in der Zukunft von der Möglichkeit, überhaupt Antworten zu bekommen!

    Zitat

    und es wird auch kein fehler ausgegeben

    Na dann ist doch alles in Ordnung! :rofl:
    Der "Fehler" wird natürlich nicht ausgegeben, weil du den "Fehler" garnicht abfragst, das ist das eigentliche Problem in deinem Script!

    Zitat

    wie kann ich prüfen ob der port freigegeben ist ?

    Was heisst "freigegeben"? In dem Moment, wo du das Serverprogramm startest, "lauscht" der Server auf diesem Port. Wenn das Serverprogramm NICHT läuft, dann hat das einen anderen Grund. Z.B. könnte die Firewall das Script daran hindern, als Serverprozess zu starten. Schalte die FW einfach mal testweise ab.

    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 (20. September 2009 um 12:00)