Wieso klappt der chat nicht?

  • ich hab mir mal den chat aus dem tutorial kopiert
    hier mal der server

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Dim $szIPADDRESS = "???" ;wenn ich der server bin denn muss hier meine ip hin oder?u
    Dim $nPORT = 33891

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

    TCPStartUp()

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

    $MainSocket = TCPListen($szIPADDRESS, $nPORT)

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

    If $MainSocket = -1 Then Exit

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

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

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

    Dim $ConnectedSocket = -1

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

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

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

    Dim $szIP_Accepted = SocketToIP($ConnectedSocket)

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

    Dim $msg, $recv

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

    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop

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

    $recv = TCPRecv( $ConnectedSocket, 2048 )

    If @error Then ExitLoop

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

    If $recv <> "" Then GUICtrlSetData($edit, _
    $szIP_Accepted & " > " & $recv & @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][/autoit] [autoit]

    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

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

    $sockaddr = 0

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

    Return $aRet
    EndFunc

    [/autoit]


    hier mal der client

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    TCPStartUp()

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

    Dim $szServerPC = @IPAddress1; ist das z.B max-......?oder die ip

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

    Dim $szIPADDRESS = TCPNameToIP($szServerPC);Hier wird der Name zur IP umgewandelt
    Dim $nPORT = 33891 ;ist es egal welcher port??

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

    Dim $ConnectedSocket = -1

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

    $ConnectedSocket = TCPConnect($szIPADDRESS,$nPORT)

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

    Dim $szData

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

    If @error Then
    MsgBox(4112,"Error","TCPConnect failed with WSA error: " & @error)

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

    Else

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

    While 1

    $szData = InputBox("Data for Server",@LF & @LF & "Enter data to transmit to the SERVER:")


    If @error Or $szData = "" Then ExitLoop


    TCPSend($ConnectedSocket,$szData)


    If @error Then ExitLoop
    WEnd
    EndIf

    [/autoit]

    kann mir bitte jemand erklären was ich falsch mache??
    Ich kann auf einem rechner den server starten und mit dem client schreiben aber wenn ich dann prob mit meinem laptop den server öffnen will passiert nichts warum

    Oder können wir bitte einen ganz neuen einfachen chat erstellen

    P.S.Kann sich bitte jemand die zeit nehmen und mir helfen?

    Einmal editiert, zuletzt von Dr.??? (7. Juni 2008 um 22:11)

    • Offizieller Beitrag

    Wenn client und server auf der gleichen maschine laufen geht es?als IP muss dann 127.0.0.1 rein. Der Port für den client wird vom Server vorgegeben.
    wenn du dann client und server auf verschiednene Mschinen trennst und die Verbindung nicht klappt, musst du nochmal prüfen, ob die IP beim Server geändert ist und ob die Firewall z.B. von Windows XP den port auch raus läßt.

  • Ich möchte z.b. einen chat das ich mit kollgen chatten kann kannst du helfen einenzu schreiben

    Und wie kann ich das mit den ports regeln hab bei meinem router eingestellt das eingehdeports von 33891 bis 33891
    und ausgehende 33891 ist das so richtig

    Muss ich beim server die selbe ip angeben wie beim client oder ist die beim client die ip von z.b. eines kollegen??

  • Muss mein kollege den selben port offen haben oder nur der server(ich) ??

    Hab ich nicht vieleicht noch ein code von einmal ganz einfachen chat

    P.S. bleibt meine ip immer die selbe oder ändert die sich?

    • Offizieller Beitrag

    die gleichen ports müssen frei sein.
    wichtig ist, dass das die sind, die du im server definierst. weil nur auf diese hört dein server.

    Deine ip ändert sich bei jeder einwahl beim provider. also spätestens nach 24h. für solche fälle gibt es dann dnydns.org.
    die geben die eine feste domain und dein router oder ein kleines programm aktualisieren dann bei dyndns deine ipadresse.
    so bist du von außen immer erreichbar.

  • Also ist es nur abhängig von den ports ,das müssen die selben sein?

    Was genau ist an dem code verkehrt wenn man davon ausgeht das ich mit jemand anderes chatten will also anderer rechner

    • Offizieller Beitrag

    So geht das bei mir:

    Server

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Dim $szIPADDRESS = "192.168.200.20" ;hier muss meine externe ip rein
    Dim $nPORT = 33891 ;der Port muss auf dem Router

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

    TCPStartUp()

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

    $MainSocket = TCPListen($szIPADDRESS, $nPORT)

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

    If $MainSocket = -1 Then Exit

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

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

    [/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)

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

    Dim $msg, $recv

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

    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop

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

    $recv = TCPRecv( $ConnectedSocket, 2048 )

    If @error Then ExitLoop

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

    If $recv <> "" Then GUICtrlSetData($edit, _
    $szIP_Accepted & " > " & $recv & @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][/autoit] [autoit]

    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

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

    $sockaddr = 0

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

    Return $aRet
    EndFunc

    [/autoit]

    Client

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    TCPStartUp()

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

    Dim $szServerPC = '192.168.200.20'; ist das hier meine externe ip, da ich meinen router nicht auf machen will

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

    Dim $szIPADDRESS = TCPNameToIP($szServerPC);Hier wird der Name zur IP umgewandelt
    Dim $nPORT = 33891 ;ist es egal welcher port??

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

    Dim $ConnectedSocket = -1

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

    $ConnectedSocket = TCPConnect($szIPADDRESS,$nPORT)

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

    Dim $szData

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

    If @error Then
    MsgBox(4112,"Error","TCPConnect failed with WSA error: " & @error)

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

    Else

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

    While 1

    $szData = InputBox("Data for Server",@LF & @LF & "Enter data to transmit to the SERVER:")


    If @error Or $szData = "" Then ExitLoop


    TCPSend($ConnectedSocket,$szData)


    If @error Then ExitLoop
    WEnd
    EndIf

    [/autoit]
  • Jetzt bin ich voll durcheinander ich denke die ports müssen gleich sein so finden die sich
    oder ??? hääää

  • wenn ich deinen code kopier und mit meiner ip ersetze dann augelesen hiermit

    Spoiler anzeigen
    [autoit]

    Dim $GOOEY = GUICreate("IP LAN Scanner 1.2",350,300)
    Dim $edit = GUICtrlCreateEdit("",10,10,300,180)
    guisetstate()
    $i=1

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

    do
    $ipadd=@IPAddress1

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

    $ip=stringsplit($ipadd,".")

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

    $ipstring=$ip[1] & "." & $ip[2] & "." & $ip[3] & "."

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

    tooltip($ipstring & $i,0,0)

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

    $var = Ping($ipstring & $i,8)
    If $var Then
    GUICtrlSetData($edit,"Found:" & $ipstring & $i & @CRLF & GUICtrlRead($edit))
    filewrite("network.txt", @hour & ":" & @min & ":" & @SEC & " IP: " & $ipstring & $i & @CRLF)
    EndIf

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

    sleep(10)
    $i=$i+1

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

    until $i=254

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

    msgbox(1,"Fertig","ENDE")

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

    funzt es net es geht ein fenster auf und schliesst gleich wieder ,was ist eine externe ip??
    ist das die