Vom Client zum Server

  • Ich habe ein problem und habe noch nichts dazu gefunden

    1.Frage
    wie kann ich vom Client den wert von $name zum server schicken so das er im eintrag als name verwendet wird?

    2.Frage
    Wie kann ich die daten die im edit des Servers angezeigt werden auch im Client anzeigen hab dazu noch nix gefunden und weis nicht wie es geht

    Mein 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}","_senden")
    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))
    If @error Then Exit

    While 1
    $msg = GUIGETMSG()
    Switch $msg
    Case $sendenbutton
    TCPSend($ConnectedSocket,GUICTrlRead($szData))
    Case -3
    Exit
    EndSwitch
    WEnd
    EndFunc

    [/autoit]

    Mein Server

    Spoiler anzeigen
    [autoit]

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

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

    Dim $szIPADDRESS = @IPAddress1
    Dim $nPORT = 33891

    [/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("Mein Server (IP: " & $szIPADDRESS & ")",300,200)
    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()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    $recv = TCPRecv( $ConnectedSocket, 2048 )
    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 & $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]

    ; 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

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

    $sockaddr = 0

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

    Return $aRet
    EndFunc

    [/autoit]

    Ich hoffe mir kann jemand helfen

    Einmal editiert, zuletzt von simon (22. April 2009 um 16:36)

  • ich habe das vorkurzem so gemacht :
    Client :

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    #include <GuiConstantsEx.au3>
    #include <EditConstants.au3>
    #include <Array.au3>
    $g_IP = "192.168.178.34"
    TCPStartUp()
    $socket = TCPConnect( $g_IP, 65432 )
    If $socket = -1 Then Exit
    GuiCreate("Server Connect :"&$g_IP,300,300)
    Global $edit = GUICtrlCreateEdit("",10,10,280,180,$ES_READONLY)
    Global $input = GUICtrlCreateInput("",10,200,280,50)
    Global $DataSend = GUICtrlCreateButton("Datei versenden",10,270,150,30)
    GuiSetState()
    $szIP_Accepted=_SocketToIP($socket)
    AdlibEnable("_empfangen")
    While 1
    If _IsPressed("0D") Then
    Global $Sended = GuiCtrlREad($input)
    If $Sended <> "" Then
    TCPSend($socket,GuiCtrlREad($input))
    EndIf
    GUICtrlSetData($input,"")
    If $Sended <> "" Then
    GuiCtrlSetData($edit,@IPAddress1 & " > " & $Sended & @crlf &GuiCtrlRead($edit))
    EndIf
    EndIf
    $msg=GUIGetMsg()
    Select
    Case $msg=$GUI_EVENT_CLOSE
    Exit 1
    Case $msg=$DataSend
    $File_Reset=FileOpenDialog("Datei",@DesktopDir,"(*.au3)")
    $Bin=FileRead($File_Reset)
    $Type=_FileGetType($File_Reset)
    TCPSend($socket,"Data;"&$Type&";"&$Bin)
    EndSelect
    WEnd
    Func _empfangen()
    $recv=TCPRecv($socket,999999)
    If StringinStr($recv,"Data") Then
    $ask=MsgBox(4,"Datei","Jemand will ihnen eine Datei schicken annehmen ?")
    If $ask <> 7 Then
    $Save=FileSaveDialog("Datei",@DesktopDir,"(*.*)")
    $Split=StringSplit($recv,";")
    _ArrayDelete($Split,0)
    $DataType=$Split[1]
    $DataBin=$Split[2]
    FileWrite($Save&"."&$DataType,$DataBin)
    EndIf
    Else
    If $recv <> "" Then
    GuiCtrlSetData($edit,$szIP_Accepted & " > " & $recv & @crlf &GuiCtrlRead($edit))
    EndIf
    EndIf
    EndFunc
    Func _SocketToIP($SHOCKET)
    Local $sockaddr, $aRet

    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")

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

    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
    "ptr", DllStructGetPtr($sockaddr), "int*", 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 ;==>SocketToIP
    #include <Array.au3>
    Func _FileGetType($f_handle)
    $Array=StringSplit($f_handle,".")
    _ArrayDelete($Array,0)
    Return $Array[Ubound($Array,1)-1]
    EndFunc

    [/autoit]

    Server :

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <Misc.au3>
    #include <EditConstants.au3>
    #include <Array.au3>
    $g_IP = @IPAddress1
    TCPStartUp()
    $MainSocket = TCPListen($g_IP, 65432, 100 )
    If $MainSocket = -1 Then Exit
    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1
    $szIPADDRESS=@IPAddress1
    $GOOEY = GUICreate("My Server (IP: " & $szIPADDRESS & ")", 300, 300)
    Global $edit = GUICtrlCreateEdit("", 10, 10, 280, 180,$ES_READONLY)
    Global $input = GUICtrlCreateInput("",10,200,280,50)
    Global $DataSend = GUICtrlCreateButton("Datei versenden",10,270,150,30)
    GUISetState()
    AdlibEnable("_empfangen")
    Global $szIP_Accepted=_SocketToIP($ConnectedSocket)
    While 1
    If _Ispressed("0D") Then
    Global $Sended=GuiCtrlRead($input)
    If $Sended <> "" Then
    TCPSend($ConnectedSocket,GuiCtrlRead($input))
    Endif
    GuiCtrlSetData($input,"")
    If $Sended <> "" Then
    GUICtrlSetData($edit,@IPAddress1 & " > " & $Sended & @CRLF & GUICtrlRead($edit))
    EndIf
    Endif
    $msg=GUIGetMsg()
    Select
    Case $msg=$GUI_EVENT_CLOSE
    Exit 1
    Case $msg=$DataSend
    $File_Reset=FileOpenDialog("Datei",@DesktopDir,"AutoIt Files(*.au3*)")
    $Bin=FileRead($File_Reset)
    $Type=_FileGetType($File_Reset)
    TCPSend($ConnectedSocket,"Data;"&$Type&";"&$Bin)
    EndSelect
    WEnd
    Func _empfangen()
    $recv=TCPRecv($ConnectedSocket,99999)
    If StringinStr($recv,"Data") Then
    $ask=MsgBox(4,"Datei","Jemand will ihnen eine Datei schicken annehmen ?")
    If $ask <> 7 Then
    $Save=FileSaveDialog("Datei",@DesktopDir,"(*.*)")
    $Split=StringSplit($recv,";")
    _ArrayDelete($Split,0)
    $DataType=$Split[1]
    $DataBin=$Split[2]
    FileWrite($Save&"."&$DataType,$DataBin)
    EndIf
    Else
    If $recv <> "" Then
    GUICtrlSetData($edit,$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
    EndIf
    EndIf
    endFunc
    Func _SocketToIP($SHOCKET)
    Local $sockaddr, $aRet

    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")

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

    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
    "ptr", DllStructGetPtr($sockaddr), "int*", 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 ;==>SocketToIP
    Func _FileGetType($f_handle)
    $Array=StringSplit($f_handle,".")
    _ArrayDelete($Array,0)
    Return $Array[UBound($Array,1)-1]
    EndFunc ;=====> _FileGetType

    [/autoit]


    Damit kann man noch autoit dateien versenden :D hat halt noch fehler weil ich daran nicht mehr weitergearbeitet habe :D

  • Achso ich wollte aber wissen wie man einen Wert einer Variabelen also in diesem Fall von $name ($name = Inputbox zur namenseingabe) zum Server geschickt wird um dort zum eingeben den namen also den wert von $name auszugeben