nachricht kommt nicht an

  • Hi ich habe mal einen TCP CHat gemacht der auch funktioniert allerdings nur auf meinem Computer weil wenn ich mit jemandem anderen CHaten will kommt immer server nix an

    Client

    Spoiler anzeigen
    [autoit]

    ;CLIENT! Starte mich, nachdem der Server gestartet wurde!!!!!!!!!!!!!!!

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

    #include <GUIConstants.au3>

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

    ;HotKeySet("{ENTER}","_senden2")
    Global Const $WS_POPUP = 0x80000000
    Global Const $WS_MAXIMIZEBOX = 0x00010000
    Global Const $WS_MINIMIZEBOX = 0x00020000
    Global Const $WS_SIZEBOX = 0x00040000
    Global Const $BS_MULTILINE = 0x2000

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

    TCPStartup()
    Dim $szServerPC = @ComputerName
    Dim $szIPADDRESS = TCPNameToIP($szServerPC)
    Dim $nPORT = 33891
    Dim $ConnectedSocket = -1

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

    $ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)

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

    Dim $szData

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

    If @error Then
    MsgBox(4112, "Fehler", "TCPConnect schlug mit folgendem WSA-Fehler fehl: " & @error)
    Else
    While 1
    $name = InputBox("Name", "Bitte deinen Name eingeben:")
    ;TCPSend($ConnectedSocket,$name)
    Sleep(1000)
    _senden()
    WEnd
    EndIf

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

    Func _senden()

    $gui = GUICreate("TCP Send", 300, 200)
    $szData = GUICtrlCreateInput("", 10, 10)
    $sendenbutton = GUICtrlCreateButton("Senden", 10, 50)
    GUISetState()

    ;If @error Or $szData = "" Then Exit
    ;TCPSend($ConnectedSocket, GUICtrlRead($szData))
    ;TCPSend($ConnectedSocket, $name)
    If @error Then Exit

    While 1
    $msg = GUIGetMsg()
    $readdeselementes = GUICTrlREad($szData)
    Switch $msg
    Case $sendenbutton
    If ($readdeselementes) = ("") THen
    TCPSend($ConnectedSocket,$name & " " & "(" & @Hour & ":" & @MIN & ")" & @CRLF & ":-)" & @CRLF)
    ;TCPSend($ConnectedSocket, $name)
    Else
    TCPSend($ConnectedSocket,($name & " " & "(" & @Hour & ":" & @MIN & ")" & @CRLF & $readdeselementes) & @CRLF)
    ;Sleep(0)
    ;TCPSend($ConnectedSocket, $name)
    EndIf

    Case - 3
    Exit
    EndSwitch
    WEnd
    EndFunc ;==>_senden

    [/autoit]

    Server:

    Spoiler anzeigen
    [autoit]

    ;SERVER!! Starte mich zuerst !!!!!!!!!!!!!!!
    #include <GUIConstants.au3>

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

    Global Const $WS_POPUP = 0x80000000
    Global Const $WS_MAXIMIZEBOX = 0x00010000
    Global Const $WS_MINIMIZEBOX = 0x00020000
    Global Const $WS_SIZEBOX = 0x00040000
    Global Const $BS_MULTILINE = 0x2000

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

    Dim $szIPADDRESS = @IPAddress1
    Dim $nPORT = 33891

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

    TCPStartUp()

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

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

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

    If $MainSocket = -1 Then Exit

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

    Dim $GOOEY = GUICreate("Mein Server (IP: " & $szIPADDRESS & ")",300,200,0,0)
    Dim $edit = GUICtrlCreateEdit("",10,10,280,180)
    GUICTrlSEtState($edit,$GUI_DISABLE)
    GUISetState()

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

    Dim $ConnectedSocket = -1
    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1
    Dim $szIP_Accepted = SocketToIP($ConnectedSocket)
    Dim $msg, $recv

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

    While 1
    $msg = GUIGetMsg()
    $name = TCPRecv($ConnectedSocket,2048)
    ;$recv = TCPRecv($ConnectedSocket, 2048)
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    If @error Then ExitLoop

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

    ; Erneuert das Edit Steuerelement mit dem, was wir empfangen haben.
    ;----------------------------------------------------------------
    If $name <> "" Then GUICtrlSetData($edit,$name & GUICTrlRead($edit)) ;& " " & "(" & (@HOUR & " " & ":" & @MIN) & ")" & @CRLF & $name &@CRLF & GUICTrlRead($edit))
    WEnd

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

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

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

    TCPShutDown()

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

    ; Funktion um die IP Adresse eines verbundenen Sockets wiederzugeben.
    ;----------------------------------------------------------------------
    Func SocketToIP($SHOCKET)
    Local $sockaddr = DLLStructCreate("short;ushort;uint;char[8]")

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

    Local $aRet = DLLCall("Ws2_32.dll","int","getpeername","int",$SHOCKET, _
    "ptr",DLLStructGetPtr($sockaddr),"int_ptr",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
    $sockaddr = 0
    Return $aRet
    EndFunc

    [/autoit]

    Weis da jemand was dazu

  • Wie wärs mit mehr Informationen ?

    Wo ist der "andere" ?
    Welche Einstellungen bezüglich Ports & Ips hast du ausprobiert ?
    Kommt nur nichts an oder schlägt die Verbindung direkt fehl ?

    Zitat

    Weis da jemand was dazu


    Ich denke zum Thema TCP gibt es hier eine ganze Menge an Experten,
    aber wie soll man dir helfen ?
    Derartige Probleme wurden auch schon oft diskutiert, arbeite dich doch einfach mal
    durch andere Topics durch und probier die dort genannten Lösungsvorschläge aus,
    sofern sie in gewisser Weise mit deinem Problem zu tun haben...
    so far... :rolleyes:

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Mein Problem ist wenn ich mit dem Programm auserhalb meines Netzwerkes chaten will kommt nichts bei mir an und nichts bei anderen allerdings kommt keine Fehlermeldung

  • Hier ein paar Links
    http://de.wikipedia.org/wiki/Portweiterleitung
    http://www.administrator.de/index.php?cont…4c422ec6834103e
    Anleitungen:
    DLink
    FritzBox

    //Edit: der Server muss trotzdem noch mit der lokalen IP laufen (oder IP ganz weglassen) [ TCPListen("", $port) ]
    .... Der Client muss auf deine Internet-IP verbinden, die du mit _GetIP am Server bekommst.

    //Edit:

    [autoit]

    Dim $szServerPC = @ComputerName
    Dim $szIPADDRESS = TCPNameToIP($szServerPC)

    [/autoit]


    Das funktioniert so nicht mehr übers Internet. Das geht nur im lokalen Netzwerk.
    Du kannst aber für den Server DynDNS, no-IP oder einen ähnlichen Dienst einrichten und die Adresse von dort bei $szServerPC eintragen.
    Bsp: $szServerPC = "Scripter192.dyndns.org"

    Einmal editiert, zuletzt von progandy (25. April 2009 um 18:25)