TCP Frage

  • Oh man ich merke gerade das ich ganz schön nichts mehr drauf habe ^^

    Also ich habe jetzt ein kleines Login gemacht dies sieht so aus

    [autoit]


    Func _Login($Socket, $Obj)
    Local $sPfad = "\Bilder\"
    TCPSend($Socket, "<login>" & $sPfad & $Obj & "</login>")
    EndFunc

    [/autoit]

    Jetzt Sendet der Server ein Paket zurück das die Player Information füllen soll

    [autoit]


    Global $aPlayer[50][5]

    [/autoit]

    Der Server Sendet

    Code
    <blogin>IMG;WIDTH;HEIGHT;X;Y</blogin>

    Die LoginRecv Funktion sieht bis jetzt so aus

    [autoit]


    Func _LoginRecv($Socket)
    Local $sRecvData, $sData
    $sRecvData = TCPRecv($Socket, 2048)
    If $sRecvData <> "" Then
    $sData = StringSplit($sRecvData, ";")
    If $sData[0] == 5 Then
    Else
    MsgBox(48, "Login", "Es gab ein Fehler beim Login")
    EndIf
    EndIf
    EndFunc

    [/autoit]

    Wie man sieht frage ich ab ob in sData 5 Objekte drine sind wenn ja den ist das dies Loginb Paket meine frage ist muss ich jetzt 5 for schleifen erstellen damit
    ich alle 5 Spalten des $aPlayer -> Arrays voll bekomme ?

  • Irgendwie kann ich nicht logisch denken :P ^^ ich wollte jetzt doch erstmal mit eine P2P Client anfangen also das nur die Clients sich austauschen ^^

    Doch klappt nicht so ganz vlt hat James1337 oder ein anderer ein denk stoß ^^

    Client~

    [autoit]


    #RequireAdmin
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <String.au3>
    #include <Misc.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("P2P - Main", 378, 254, 192, 164)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Global $sIP = "127.0.0.1", $iPort = 2266
    Global $Main, $Main_Width, $Main_Height, $Main_X = 1, $Main_Y = 1 ; Client Infos
    Global $Online_X = 20, $Online_Y = 20
    Global $hGrafik, $hBuffer, $hBitmap
    Global $Background
    Global $tConnect
    Global $iTimer = TimerInit()
    TCPStartup()
    Do
    $tConnect = TCPConnect($sIP, $iPort)
    Until TimerDiff($iTimer) >= 5000

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

    _GDIPlus_Startup()
    $Main = _GDIPlus_ImageLoadFromFile("Unten.png")
    $Background = _GDIPlus_ImageLoadFromFile("bck.png")
    $Main_Width = _GDIPlus_ImageGetWidth($Main)
    $Main_Height = _GDIPlus_ImageGetHeight($Main)

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

    $hGrafik = _GDIPlus_GraphicsCreateFromHWND($Form1)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(378, 254, $hGrafik)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    While 1
    _Steuerung($tConnect)
    _RePos($tConnect)
    _Draw($Main, $Main_X, $Main_Y, $Main_Width, $Main_Height, $Main, $Online_X, $Online_Y, $Main_Width, $Main_Height)
    WEnd

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

    Func _Draw($Obj, $X, $Y, $Width, $Height, $Obj_1, $X_1, $Y_1, $Width_1, $Height_1)
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $Background, 0, 0, 378, 254)
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $Obj, $X, $Y, $Width, $Height)
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $Obj_1, $X_1, $Y_1, $Width_1, $Height_1)
    _GDIPlus_GraphicsDrawImage($hGrafik, $hBitmap, 0, 0)
    ;//_Draw($Main, $Main_X, $Main_Y, $Main_Width, $Main_Height, $Main, $Online_X, $Online_Y, $Main_Width, $Main_Height)
    EndFunc

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

    Func _Steuerung($Socket)
    Select
    Case _IsPressed(25)
    $Main_X -= 1
    TCPSend($Socket, "<left->" & $Main_X & "</left->")
    Case _IsPressed(26)
    $Main_Y -= 1
    TCPSend($Socket, "<up->" & $Main_Y & "</up->")
    Case _IsPressed(27)
    $Main_X += 1
    TCPSend($Socket, "<right+>" & $Main_X &"</right+>")
    Case _IsPressed(28)
    $Main_Y += 1
    TCPSend($Socket, "<down+>" & $Main_Y &"</down+>")
    EndSelect
    EndFunc

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

    Func _RePos($Socket)
    Local $sRecvData, $sLeftMinus, $sUpMinus
    Local $sRightPlus, $sDownPlus
    $sRecvData = TCPRecv($Socket, 2048)

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

    If StringInStr($sRecvData, "<left->") = 1 Then ; Left -
    $sLeftMinus = _StringBetween($sRecvData, "<left->", "</left->")
    $Online_X -= $sLeftMinus[1]
    ElseIf StringInStr($sRecvData, "<up->") = 1 Then ; Up -
    $sUpMinus = _StringBetween($sRecvData, "<up->", "</up->")
    $Online_Y -= $sUpMinus[1]
    ElseIf StringInStr($sRecvData, "<right+>") = 1 Then ; Right +
    $sRightPlus = _StringBetween($sRecvData, "<right+>", "</right+>")
    $Online_X += $sRightPlus[1]
    ElseIf StringInStr($sRecvData, "<down+>") = 1 Then ; Down +
    $sDownPlus = _StringBetween($sRecvData, "<down+>", "</down+>")
    $Online_Y += $sDownPlus[1]
    EndIf
    EndFunc

    [/autoit][autoit]


    #RequireAdmin
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <String.au3>
    #include <Misc.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("P2P - Main", 378, 254, 192, 164)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Global $sIP = "127.0.0.1", $iPort = 2266
    Global $Main, $Main_Width, $Main_Height, $Main_X = 1, $Main_Y = 1 ; Client Infos
    Global $Online_X = 20, $Online_Y = 20
    Global $hGrafik, $hBuffer, $hBitmap
    Global $Background
    Global $tConnect
    Global $iTimer = TimerInit()
    TCPStartup()
    Do
    $tConnect = TCPConnect($sIP, $iPort)
    Until TimerDiff($iTimer) >= 5000

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

    _GDIPlus_Startup()
    $Main = _GDIPlus_ImageLoadFromFile("Unten.png")
    $Background = _GDIPlus_ImageLoadFromFile("bck.png")
    $Main_Width = _GDIPlus_ImageGetWidth($Main)
    $Main_Height = _GDIPlus_ImageGetHeight($Main)

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

    $hGrafik = _GDIPlus_GraphicsCreateFromHWND($Form1)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(378, 254, $hGrafik)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    While 1
    _Steuerung($tConnect)
    _RePos($tConnect)
    _Draw($Main, $Main_X, $Main_Y, $Main_Width, $Main_Height, $Main, $Online_X, $Online_Y, $Main_Width, $Main_Height)
    WEnd

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

    Func _Draw($Obj, $X, $Y, $Width, $Height, $Obj_1, $X_1, $Y_1, $Width_1, $Height_1)
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $Background, 0, 0, 378, 254)
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $Obj, $X, $Y, $Width, $Height)
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $Obj_1, $X_1, $Y_1, $Width_1, $Height_1)
    _GDIPlus_GraphicsDrawImage($hGrafik, $hBitmap, 0, 0)
    ;//_Draw($Main, $Main_X, $Main_Y, $Main_Width, $Main_Height, $Main, $Online_X, $Online_Y, $Main_Width, $Main_Height)
    EndFunc

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

    Func _Steuerung($Socket)
    Select
    Case _IsPressed(25)
    $Main_X -= 1
    TCPSend($Socket, "<left->" & $Main_X & "</left->")
    Case _IsPressed(26)
    $Main_Y -= 1
    TCPSend($Socket, "<up->" & $Main_Y & "</up->")
    Case _IsPressed(27)
    $Main_X += 1
    TCPSend($Socket, "<right+>" & $Main_X &"</right+>")
    Case _IsPressed(28)
    $Main_Y += 1
    TCPSend($Socket, "<down+>" & $Main_Y &"</down+>")
    EndSelect
    EndFunc

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

    Func _RePos($Socket)
    Local $sRecvData, $sLeftMinus, $sUpMinus
    Local $sRightPlus, $sDownPlus
    $sRecvData = TCPRecv($Socket, 2048)

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

    If StringInStr($sRecvData, "<left->") = 1 Then ; Left -
    $sLeftMinus = _StringBetween($sRecvData, "<left->", "</left->")
    $Online_X -= $sLeftMinus[1]
    ElseIf StringInStr($sRecvData, "<up->") = 1 Then ; Up -
    $sUpMinus = _StringBetween($sRecvData, "<up->", "</up->")
    $Online_Y -= $sUpMinus[1]
    ElseIf StringInStr($sRecvData, "<right+>") = 1 Then ; Right +
    $sRightPlus = _StringBetween($sRecvData, "<right+>", "</right+>")
    $Online_X += $sRightPlus[1]
    ElseIf StringInStr($sRecvData, "<down+>") = 1 Then ; Down +
    $sDownPlus = _StringBetween($sRecvData, "<down+>", "</down+>")
    $Online_Y += $sDownPlus[1]
    EndIf
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Du kannst nicht einfach so einen P2P-Client machen...^^
    (Es geht so auch gar nicht, da du zwar verbinden willst, aber keinen Server hast, zu dem du verbinden kannst. Für den Anfang ist das auch eigentlich zu kompliziert und umständlich...)
    Wieso willst du das überhaupt und machst nicht mit dem Server weiter, wie in den vorherigen Posts?

    MfG, James

  • So ,

    Ich habe mal einen kleinen Server aus dem Forum genommen und ein bissel abgeändert. der Server sendet schön an die Client die Position
    Doch jetzt habe ich leider das Problem wenn ich mich Im Client_A Bewege das sich die Position auch des eigenlichen Client_B Char sich auch beweget genau so wie
    Im Client_B vlt kann mir jemand skriptich helfen also einen Code vlt Posten der diesen Bug Fixt !

    http://www.file-upload.net/download-47225…--Mode.rar.html

  • Wieso sendet eigentlich der Server die Position? Sollten die Clients nicht ihre Position senden?
    Zu dem Problem: Ist auch völlig logisch, wenn der Server(?) nur die Position sendet, und nicht um wessen Position es sich eigentlich handelt...

  • Zitat

    Wieso sendet eigentlich der Server die Position? Sollten die Clients nicht ihre Position senden?
    Zu dem Problem: Ist auch völlig logisch, wenn der Server(?) nur die Position sendet, und nicht um wessen Position es sich eigentlich handelt...

    Kannst du vlt mal Codelich zeigen was du meinst <,<

  • Zitat

    Geht es hier eigentlich noch/wieder um UDP oder noch um TCP?

    Hast du dir nicht den Code aus der Winra angeschaut wenn nicht TCP :)

  • Sorry, ich kann leider momentan kein Beispiel schreiben, aber du kannst ja mal versuchen, ob es so schaffst, die Clients zu identifizieren (z.B. durch eine weiteres Element in $aPlayer).
    Denn wenn die einzelnen Clients identifiziert werden können, ist es auch leichter deren Charakter bei den einzelnen Clients (und im Server) zu verändern, ohne dadurch gleich jeden Client zu verändern.

  • So,

    Ich bin mal wieder da und gleich mit einer frage :rofl::rofl: ich habe jetzt einen kleinen Server geschrieben jetzt möchte ich bestimmte Clients kicken per Socket - ID habe schon viel versucht doch leider will das nicht ganz so

    _DelClient

    [autoit]


    Func _DelClient($hSocket)
    Local $i
    For $i = 1 To $aClients[0][0]
    If $aClients[$i][0] = $hSocket Then
    TCPCloseSocket($aClients[$i][0])
    $aClients[$i][0] = '' ;Entferne Client
    Return True
    EndIf
    Next
    Return False
    EndFunc ;==>_DelClient

    [/autoit]

    _KickClient

    [autoit]


    Func _KickClient()
    Local $sKick = InputBox("Kick-Client", "Geben sie die Socket-ID des Clients ein den sie Kicken möchten !")
    If $sKick < 1 Or $sKick > $niMaxconnection Then
    _Edit_Success("Fehler die Socket-ID : " & $sKick & " Gibt es nicht !")
    Else
    TCPSend($aClient[$sKick][0], $sKickMsg)
    _DelClient($aClient[$sKick][0])
    _Edit_Success("Sie haben den Client mit der Socket-ID : " & $sKick & " Gekickt !")
    EndIf
    EndFunc

    [/autoit]

    Doch wenn ich _KickClient benutze Crasht der Server ?

    @Edit : Habe es selbst hin bekommen

    [autoit]


    Func _KickClient()
    Local $sKick = InputBox("Kick-Client", "Geben sie die Socket-ID des Clients ein den sie Kicken möchten !")
    If $sKick < 1 Or $sKick > $niMaxconnection Then
    _Edit_Success("Fehler die Socket-ID : " & $sKick & " Gibt es nicht !")
    Else
    For $i = 1 To $aClient[0][0]
    If $aClient[$i][0] == $sKick Then
    TCPSend($aClient[$i][0], $sKickMsg)
    TCPCloseSocket($aClient[$i][0])
    $aClient[$i][0] = ''; Entfernt Client
    _Edit_Success("Sie haben den Client mit der Socket-ID : " & $aClient[$i][0] & " Gekickt !")
    EndIf
    Next
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Memory (30. August 2012 um 21:13)