TCP-Frage

  • Hallo ,

    Ich habe heute meinen Rs-Server fertig geschrieben finde ich ^^ jetzt wollte ich gerne mit den Client anfangen doch jetzt stelle ich mir die frage

    wie soll ich das abfangen was der Server zum Client sendet ?

    ich hoffe es kann mir jemand helfen :)

    @Edit : Source vorm Server

    Spoiler anzeigen
    [autoit]


    #RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Date.au3>

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

    Global $ServerSocket, $ConnectSocket = -1, $RecvSocket
    Global $ClientSocket, $SendSocket, $BackToAdress
    Global $RecvLen, $StringSplit, $Ip = IniRead("Setting.ini", "Connect", "IP", ""), $Port = IniRead("Setting.ini", "Connect", "PORT", "")
    Global $MaxDataTrans = IniRead("Setting.ini", "Config", "MaxDataTrans", ""), $Delimiters = IniRead("Setting.ini", "Config", "Delimiters", ""), $Pfad = IniRead("Setting.ini", "Config", "Pfad", "")

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

    ConsoleWrite("Rs-Remote 0.1 by NetCode 3.0" & @CRLF & "#=> Lade alle Setting.ini Information " & @CRLF & _
    "- IP :" & $Ip & @CRLF & "- Port :" & $Port & @CRLF & "- Pfad :" & $Pfad & @CRLF & "- MaxDataTrans :" & $MaxDataTrans & @CRLF & "- Delimierts :" & $Delimiters & @CRLF & "#=> Server ist erfolgreich Gestartet " & @CRLF)

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

    TCPStartup()
    $ServerSocket = TCPListen($Ip, $Port)
    Do
    $ConnectSocket = TCPAccept($ServerSocket)
    Until $ConnectSocket <> -1

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

    While 1
    $BackToAdress = SocketToIP($ConnectSocket)
    $RecvSocket = TCPRecv($ConnectSocket, $MaxDataTrans)
    $RecvLen = StringLen($RecvSocket)
    If $RecvLen > 1 Then
    _Commando($RecvSocket) ; Diese Funktion prüft die eingab ob es ein Befehl ist !
    EndIf
    WEnd
    TCPCloseSocket($ConnectSocket)
    TCPShutdown()

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

    Func _Commando($pCommando)
    $StringSplit = StringSplit($pCommando, $Delimiters)
    If Not @error Then
    If $StringSplit[1] == "/start" Then
    Run($Pfad & $StringSplit[2] & "\" & $StringSplit[3])
    If ProcessExists($StringSplit[3]) Then
    BackSendToClient("Sie haben " & $StringSplit[3] & " Gestartet !")
    _Log("Sie haben " & $StringSplit[3] & " Gestartet !")
    Else
    BackSendToClient("Das Program " & $StringSplit[3] & " konnte nicht Gestartet werden !")
    _Log("Das Program " & $StringSplit[3] & " konnte nicht Gestartet werden !")
    EndIf
    EndIf
    Else
    BackSendToClient("Fehler : Geben sie bitte alle Parameter ein !")
    _Log("Fehler : Geben sie bitte alle Parameter ein !")
    EndIf
    EndFunc ;==>_Commando

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

    Func BackSendToClient($oNachricht)
    $ClientSocket = TCPConnect($BackToAdress, $Port)
    $SendSocket = TCPSend($ClientSocket, $oNachricht)
    EndFunc ;==>BackSendToClient

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

    Func _Log($oText)
    $Zeit = _NowTime()
    ConsoleWrite("Wann =>" & $Zeit & " | Form =>" & $BackToAdress & " | " & $oText & @CRLF)
    EndFunc ;==>_Log

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

    Func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet

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

    $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

    [/autoit]
  • Zeile 58 ist völlig überflüssig. Ein TCP-Socket ist Bidirektional, das heisst du kannst über das Socket, welches du beim Server gemacht hast, auch Zeug zurückschicken. TCPConnect brauchst du dann auf der Client-Seite. Schau dir am besten noch mal die Hilfe an und sonst findest du ganz viele Tutorials hier im Forum.

    Gruss Shadowigor