Button reagiert nicht

  • Hi @all ich habe einen TCP Chat erstellt und jetzt passiert nix wenn man auf den BUtton klickt (nicht mehr)

    Client
    [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 & ":-)")
    ;TCPSend($ConnectedSocket, $name)
    Else
    TCPSend($ConnectedSocket,($name & " " & "(" & @Hour & ":" & @MIN & ")" & @CRLF & $readdeselementes))
    ;Sleep(0)
    ;TCPSend($ConnectedSocket, $name)
    EndIf

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

    [/autoit]
    Server
    [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 $recv <> "" Then GUICtrlSetData($edit,$name ) ;& " " & "(" & (@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]

    Ich hoffe mir kann da jemand Helfen

    PS: Der Chat funktioniert aber der Button reagiert auf einmal nicht mehr zum Senden im Client

  • ok habe das problem ... ka wiso deine methode nich geht :D aber der server hier geht ... :


    Spoiler anzeigen
    [autoit]

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

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

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

    GUISetState()

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

    Dim $ConnectedSocket = -1
    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1
    Dim $szIP_Accepted = SocketToIP($ConnectedSocket)
    Dim $msg, $recv
    $nameold=''
    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<>$nameold then
    GUICtrlSetData($edit,$name ) ;& " " & "(" & (@HOUR & " " & ":" & @MIN) & ")" & @CRLF & $name &@CRLF & GUICTrlRead($edit))
    EndIf
    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]


    EDIT: looooolz ich hab da was vergessen, und es geht trotzdem :D ... aber des is des gleiche wie d geschrieben hast 8| nur ist "" in einer Variable lolz ... autoit bringt mich manchmal zur verzweiflung ^^

  • Ah ich habe ein bisschen gesucht aber nun habe auch ich den Fehler gefunden

    Im Server Script hast du noch die Variable aus der Hilfe drin :D
    In der Hilfe steht "$recv " und in deinem Script muss natürlich "$name" stehen

    Spoiler anzeigen
    [autoit]

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

    [/autoit]

    Fehler passieren.

    MfG
    Der_Doc