Frage zu TCP

  • Also eigentlich müsste es doch klappen oder...
    ich starte an meinem pc den server und an dem laptop meines vaters den clienten und
    ich müsste die maus so steueren können wie wenn ich beides bei mir starte, oder?

    Client:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    $ClientGui = GUICreate("Client", 400, 400, 250, 150)
    $Input = GUICtrlCreateInput("Input", 10, 10, 380, 20)
    $Button = GUICtrlCreateButton("Button", 10, 40, 380, 35)
    $Group = GUICtrlCreateGroup("Maus-Analyzer", 10, 80, 380, 300)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

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

    TCPStartup();TCP wird initialisiert
    Sleep(3000)
    AdlibRegister("_moveMouse",60)

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

    While 1
    $Msg = GUIGetMsg()
    Select
    Case $Msg = $GUI_EVENT_CLOSE
    _ende()
    EndSelect
    WEnd

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

    Func _moveMouse()
    If Not _IsPressed(01) Then
    $MPos = GUIGetCursorInfo()
    If IsArray($MPos) Then
    $MposX = $MPos[0]
    $MposY = $MPos[1]
    EndIf
    $Socket = TCPConnect("127.0.0.1", 12345) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$Socket" ab
    If $Socket = -1 Then ; Wenn $Socket = -1 ist, Fehlermeldung ausgeben
    MsgBox(16, "Error", "Die Verbindung zum Server konnte nicht hergestellt werden!") ; Fehlermeldung
    EndIf
    $Message = $MposX&":"&$MposY
    $SendedBytes = TCPSend($Socket, $Message) ; Sendet den Text an unseren verbundenen Socket
    If $SendedBytes = 0 Then ; Wenn der Rückgabewert von TCPSend(...) 0 ist, Fehlermeldung ausgeben
    MsgBox(16, "Error", "Das Paket konnte nicht gesendet werden.") ; Fehlermeldung
    EndIf
    TCPCloseSocket($Socket)
    ElseIf _IsPressed(01) Then
    $Socket = TCPConnect("127.0.0.1", 12345) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$Socket" ab
    If $Socket = -1 Then ; Wenn $Socket = -1 ist, Fehlermeldung ausgeben
    MsgBox(16, "Error", "Die Verbindung zum Server konnte nicht hergestellt werden!") ; Fehlermeldung
    EndIf
    $Message = "[LeftClick]"
    $SendedBytes = TCPSend($Socket, $Message) ; Sendet den Text an unseren verbundenen Socket
    If $SendedBytes = 0 Then ; Wenn der Rückgabewert von TCPSend(...) 0 ist, Fehlermeldung ausgeben
    MsgBox(16, "Error", "Das Paket konnte nicht gesendet werden.") ; Fehlermeldung
    EndIf
    TCPCloseSocket($Socket)
    EndIf
    EndFunc

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

    Func _ende()
    $Socket = TCPConnect("127.0.0.1", 12345) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$Socket" ab
    If $Socket = -1 Then ; Wenn $Socket = -1 ist, Fehlermeldung ausgeben
    MsgBox(16, "Error", "Die Verbindung zum Server konnte nicht hergestellt werden!") ; Fehlermeldung
    EndIf
    $Message = "[Exit]"
    $SendedBytes = TCPSend($Socket, $Message) ; Sendet den Text an unseren verbundenen Socket
    If $SendedBytes = 0 Then ; Wenn der Rückgabewert von TCPSend(...) 0 ist, Fehlermeldung ausgeben
    MsgBox(16, "Error", "Das Paket konnte nicht gesendet werden.") ; Fehlermeldung
    EndIf
    TCPCloseSocket($Socket)
    TCPShutdown()
    Exit
    EndFunc

    [/autoit]

    Server:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    $ServerGui = GUICreate("Server", 400, 400, 250, 150)
    $Input = GUICtrlCreateInput("Input", 10, 10, 380, 20)
    $Button = GUICtrlCreateButton("Button", 10, 40, 380, 35)
    $Group = GUICtrlCreateGroup("Maus-Analyzer", 10, 80, 380, 300)
    $Cursor = GUICtrlCreateIcon(@WindowsDir & "\cursors\aero_arrow.cur", -1, 20, 100, 32, 35)
    GUICtrlSetBkColor(-1,0xff0000)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

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

    TCPStartup() ; TCP wird initialisiert
    $MainSocket = TCPListen("127.0.0.1", 12345) ; Den MainSocket erstellen

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

    While 1
    $Msg = GUIGetMsg()
    Select
    Case $Msg = $Button
    MsgBox(0,"Hinweis","Button wurde gedrückt!")
    EndSelect

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

    $AcceptedSocket = TCPAccept($MainSocket) ; Wir versuchen eine möglicher Verbindung anzunehmen
    If $AcceptedSocket <> -1 Then ; Wenn $AcceptedSocket ungleich -1 ist, ...
    $ReceivedData = TCPRecv($AcceptedSocket, 1024) ; Wenn eine Socketverbindung hergestellt wurde, empfange ein Paket vom Client ($ConnectedSocket)
    $Split = StringSplit($ReceivedData, ":")
    If $ReceivedData = "[Exit]" Then
    TCPCloseSocket($MainSocket)
    TCPShutdown()
    Exit
    ElseIf $ReceivedData = "[LeftClick]" Then
    $CursorInfo = ControlGetPos("Server","",$Cursor)
    If IsArray($CursorInfo) Then
    $CursorX = $CursorInfo[0]
    $CursorY = $CursorInfo[1]
    MouseClick("left",1,$CursorX,$CursorY)
    EndIf
    ElseIf IsArray($Split) Then
    $X = $Split[1]
    $Y = $Split[2]
    ;$ServerGuiInfo = WinGetPos("Server","")
    ;$ServerGuiX = $ServerGuiInfo[0]+3
    ;$ServerGuiY = $ServerGuiInfo[1]+25
    ControlMove("Server","",$Cursor,$X,$Y)
    $X = 0
    $Y = 0
    EndIf
    TCPCloseSocket($AcceptedSocket)
    EndIf
    Sleep(50)
    WEnd

    [/autoit]
    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    Einmal editiert, zuletzt von retrokid (6. November 2010 um 19:08)

  • HI,
    was mir beim kurzen drüber fliegen aufgefallen ist. Du hast überall die IP 127.0.0.1 eingetragen. Du musst die natürlich Ändern wenn du den Clienten an nem andern Rechner startest als den Server

    Edit am besten Beschreibst du dein Problem mal genauer läuft es jetzt wenn Server und Client am selben Rechner laufen? Was genau geht nicht?

  • Wenn ich beides an meinem Rechner starte funzt es,
    also liegt der Fehler wahrscheinlich an den Ips und Ports was genau muss man dennn da eintragen,
    damit zwei unterschiedliche Rechner "kommunizieren" können?
    :huh:

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • [ gelöst ] Clien sendet an Server nicht übers Inet

    Falls es dann noch Fragen gibt, MELDEN!

  • Hallo, erstmal bin ich froh das mein Tread, den Andy eben gepostet hat, mal wieder verwendet werden kann^^
    Was ich aber eigentlich sagen wollte ist, sowas habe ich auch schonmal gemacht, Mausdaten schreiben auswerten und umsetzen.
    Ich hab dafür auch

    [autoit]

    TCPNameToIP ( Name )

    [/autoit]


    benutzt. Wie Sprenger mir geraten hatte.

  • Vielen Dank,
    ich werds heute abend nochmal testen.
    :)
    Und dann bescheid sagen obs funzt
    Edit: Also muss ich den Clienten am anderen Pc starten und im clientscript den Pc namen
    des ClientPcs eingeben und bei mir den server starten??

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    Einmal editiert, zuletzt von retrokid (6. November 2010 um 14:05)

  • normalerweiße reicht dem clienten die IP des Servers

    Deshlab kann das meienr ansicht nach mit 127.0.0.1 nur funktionieren wenn beide Teile auf dem selben PC laufen.

    Aber sonst bruacht der Client wirklich die IP des Servers.

    Und vlt solltest du die firewall nur für den test auch ausmachen.... auf dem rechner wo der server läuft

  • Jupp so ist es. Der Client benötigt natürlich die IP des Servers. Ausserdem sollte der Server an der IP seiner Netzwerkkarte lauschen anstatt an 127.0.0.1. Diesbezüglich ist es ratsam allen PC's im Netzwerk feste IP Adressen zuzuweisen, zumindestens der Server sollte über eine feste IP erreichbar sein. Eine DHCP Konfiguration könnte ansonsten dazu führen, dass der Server nicht mehr erreichbar ist, da er vom Router eine neue IP zugewiesen bekommen hat.

    Solltest du auch übers Internet auf den Server zugreifen wollen so solltest du dir Dienste wie dyndns.org anschauen um jederzeit über eine feste URL aus dem Internet erreichbar zu sein. Dies entfällt wenn du vom Internetprovider eine feste IP bekommst. Ausserdem musst du den Server Port in deinem Router auf die lokale IP des Servers weiterleiten (Port forwarding), wenn dieser übers Internet erreichbar sein soll. Eventuell sind dann auch noch Firewall Freigaben im Router und am Server-PC notwendig.

  • Zitat

    Edit: Also muss ich den Clienten am anderen Pc starten und im clientscript den Pc namen
    des ClientPcs eingeben und bei mir den server starten??


    Was ist an meiner verlinkten Anleitung schwer zu verstehen?

    Zitat

    Sollte die Client/Serververbindung auf dem eigenen Rechner funktionieren, dann kann man anfangen im internen Netz zu testen. Ich gehe davon aus, daß eine funktionierende Netzwerkverbindung besteht, d.h. jeder der Rechner kann den anderen im Netz "sehen" und Daten austauschen.
    Dazu die kompilierte SERVER.EXE auf einem anderen Rechner im internen Netzwerk starten, ggf Firewall deaktivieren.
    Im Rahmen des Serverfensters erscheint eine IP-Adresse, z.B. 192.168.100.105.
    Diese Adresse nun im CLIENT-Script (auf dem lokalen Rechner) in Zeile 18 eintragen:

    [autoit]

    Local $szIPADDRESS = "192.168.100.105"

    [/autoit]

    und Script starten.
    Sollte eine Fehlermeldung erscheinen....die Türzarge einige Male heftig mit dem Kopf, ihr wisst schon...das macht wach!
    Falls keine Fehlermeldung erscheint, sondern der im Client eingegebene Text im Serverfenster erscheint, gehts weiter, Test im Internet.

  • Ja ich verstehe schon, nur leider klappt es nicht.
    muss ich im clienten script bei TCPConnect(ip, port)
    bei ip die ip von meinem rechner(TCPNameToIP ("Nathan-PC")) oder die ip des rechners wo der client läuft eintragen
    eigentlich ersteres oder?
    Edit:
    Juhu es klappt.
    Vielen dank an alle :)

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    Einmal editiert, zuletzt von retrokid (6. November 2010 um 18:54)

  • Nein lass das nametoIP weg das geht soweit ich weiß nur mit DNS. Öffne mal auf dem server und dem clienten PC das CMD Fenster.

    Und gib ipconfig ein da siehst du die Ips, ich glaub das is dein problem du kennst deine ips nicht?

  • Zitat

    ich glaub das is dein problem du kennst deine ips nicht?

    Ach mit Ips hab ich mich schon genug außeinander gesetzt - hab ja schon mal nen eigenen M2-P-Server gemacht. ;)

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D