Gameserver mit udp und socket abfragen, Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Gameserver mit udp und socket abfragen, Problem

    Hi,
    ich habe hier ein kleines Problem wenn ich mit fsockopen die Statistiken von einem Gameserver (Crysis Wars)
    abfragen will. Die Verbindung herzustellen, klappt, auch etwas hin zu schicken:
    PHP-Code:
    $socket fsockopen("udp://*ip*"64100$ernno$ersstr2);
    fwrite($socket$data); 
    *ip* wird durch die serverip ersetzt

    um zu wissen was ich als Daten hinschicken muss habe ich mal mit Wireshark mitgesnifft was das Game selber schickt,
    und als Antwort kommen natürlich die Serverdaten.
    sind leider alles HEX-Werte, aus denen ich nichts lesen kann, abgesehen von der Antwort die kommen müsste.
    PHP-Code:
    $data ="\xfe\xfd\x00\x4b\x4f\x06\x00\xdb\x7e\x89\x2b\x12\x01\x06\x05\x08\x0a";
    $data .="\x03\x13\x04\x32\x33\x34\x35\x37\x36\x38\x39\x3a\x3b\x00\x00"
    Wenn ich dann aber die Daten, die der Server mir ja zurücksenden müsste, mit
    PHP-Code:
    echo fread($socket128); 
    oder
    PHP-Code:
     echo fgets($socket128); 
    abfragen will, passiert einfach nichtsmehr.
    Der Browser (Firefox) sagt mir dann Minutenlang "warte...", aber es kommt nichts.

    Habe ich etwas falsch gemacht was eine UPD-Verbindung angeht?
    Oder ist es eher wahrscheinlich das ich falsche Daten hinsende mit denen der Server nichts anzufangen weiß und einfach nichts zurückschickt?

    Danke Jungs (und vielleicht auch Mädls:-))
    Meine Homepage

  • #2
    Habe länger nichts mit Sockets gemacht, aber UDP kommt nicht über die gleiche Verbindung zurück. Du musst einen eigenen Socket erstellen, dich an einen Port binden und auf die Serverantwort horchen. Das liegt einfach daran, das UDP im Gegensatz zu TCP nicht Verbindungsorientiert arbeitet.

    Kommentar


    • #3
      Also ich habe bisher nur mit Servern auf Rcon Basis gearbeitet, dort bekomme ich mit folgendem Script eine Statusmeldung zurück:


      PHP-Code:
      $ip "12.34.567.89"
      $port 28960
      $challenge "\xFF\xFF\xFF\xFF\x02getstatus\x0a\x00";
      $fp = @fsockopen("udp://$ip"$port$errno$errstr1);
      stream_set_timeout($fp10);
      stream_set_blocking($fptrue); // SET TIMEOUT FOR OFFLINE SERVERS
      fwrite($fp$challenge);
      $buffer fread($fp4096 10);
      fclose($fp); 

      Kommentar


      • #4
        Ich habe bis jetzt eine TCP Verbindung zum Rconnect hergestellt, mit Authentifizierung und der Möglichkeit, Commands zu Rconnect zu schicken.
        Das war kein großes Problem. Mir geht es im genauen darum, die Serverstatistiken abzufragen, Kills, Deaths und ähnliches.
        Und soweit ich bis jetzt weiß geht das nicht mit einem Consolenbefehl ("status" gibt mir nur Daten die ich nicht verwenden kann).
        Darum versuche ich jetzt die UDP-Verbindung (Problem: Verbindungslos) "nachzuahmen" und die Statistiken abzufragen,
        die man bekommen kann, wenn man in der Serverliste den Server anklickt.
        Also, eigendlich genau das selbe wie Laire es hat, nur bekomme ich dann entweder keine Verbindung zum Server (Adresse könne nicht aufgelöst werden),
        oder es kommt keine Antwort, wie es mir bisher meistens passiert ist.

        Laire:
        Ich habe grade nur den Gaming-Port zur Hand.
        Das ist wahrscheinlich der Fehler. Ich werde mal schauen ob der Admin mir den Rcon-Port verrät

        PHP-Desaster:
        Bis jetzt funktioniert das "an einen Port binden und horchen" noch nicht so ganz, aber heute hab ich auch keine Lust mehr daran weiter zu probieren.
        Mit etwas Glück ist aber genau das die Antwort die mir fehlte um das Script endlich zum laufen zu bewegen.
        Meine Homepage

        Kommentar


        • #5
          In meinem Beispiel ist es auch der Gaming Port, also über den Port wo ich bei COD4 auf den server Connecte... Das komplezierte war das xFFxFFxFFxFFx02getstatusx0ax00 herraus zu finden... und das habe ich auch noch geklaut ;-)

          Das war ja der Befehl, den ich bei der Verbindung sende um den Status zurück zu bekommen....

          Kommentar


          • #6
            Achso, du bist bei COD4 :-). Ich versuchs ja mit Crysis Wars. Und ich wunder mich wieso jetzt auch nichts passiert...
            Ich werd heute Nachmittag mal schauen ob ich irgendwas besseres mit Wireshark aus dem Netzwerk abfangen kann.
            Ansonsten habe ich keine Idee mehr wie ich das ganze weiter angehen soll.
            Meine Homepage

            Kommentar


            • #7
              ich könnte dir ein funktionierendes script für soldier of fortune II schicken (rcon)

              hier hast du eine demo:
              http://anime-naruto.dyndns.org/gameserver/

              vielleicht kannst siehst du ja etwas wenn du die daten von deinem GS einträgst
              Gruß
              Uzu

              private Homepage

              Kommentar


              • #8
                @UzumakiNaruto:

                Wenn ich in der Demo IP und Port eingebe bekomm ich als fehler:
                - SoF2 server might be changing map (wait for the refresh if you have javascript enabled).
                - SoF2 server might be lagged and this request timed out.
                Was wahrscheinlich auf Deutsch heißt, dass das Script auch keine Antwort zurück bekommt.

                Würde mich aber trotzdem freuen wenn du mir mal das Script schicken kannst. Vielleicht übersehe ich ja noch immer etwas, das du aber hast :-)

                Wie entsteht folgender Fehler:
                Warning: socket_create_listen() [function.socket-create-listen]: unable to bind to given adress [98]: Address already in use in /mounted-storage/.. ./test.php on line 20

                wenn das aber der erste Befehl im Script ist?(Zeile 20 entsteht durch nen paar auskommentierte Zeilen)
                Meine Homepage

                Kommentar


                • #9
                  Naja, wenn du dich an einen Port binden willst, der schon belegt ist. Kann auch gerne mal passieren, wenn dein Skript mehrmals schnell nacheinander läuft und der Socket nicht richtig freigegeben wird. Dann dauerts etwas, bis das Betriebssystem den Port wieder freigibt. Alternativ läuft bereits etwas anderes auf dem Port.

                  Kommentar


                  • #10
                    kann da nicht der streamtimeout helfen?

                    Kommentar


                    • #11
                      so, nach langer zeit melde ich mich hier nochmal um die unklarheiten zu beseitigen.
                      Das problem lag nicht a, mir, oder am gameserver, sondern daran dass mein webspace-anbieter wohl kein udp-stream zulässt. denn bei mir zu hause auf nen schnell aufgesetzten apache bekomme ich sofort eine antwort.
                      aber damit treten jetzt die nächsten probleme auf.
                      wenn ich daten (immer die selben, festgelegten daten) zu server hinsende, bekomme ich eine zahl zurück die jedesmal variiert.
                      dann müsste ich wieder eine zahl hinschicken (natürlich ändert die sich auch, ohne irgendeinen sichtbaren bezug zur vorzahl) und darauf bekäme ich dann meine gewünschten daten.
                      das hab ich jetzt noch aus dem traffic-logs von wireshark.

                      aber da ich das nicht auf meinem webspace laufen lassen kann, werde ich das thema aufgeben.
                      Meine Homepage

                      Kommentar


                      • #12
                        Original geschrieben von h3R0in
                        ... ohne irgendeinen sichtbaren bezug zur vorzahl ...
                        Für dich ... vielleicht weiß ja hier jemand Rat?

                        aber da ich das nicht auf meinem webspace laufen lassen kann, werde ich das thema aufgeben.
                        Schade, klang echt interessant (man könnte natürlich auch den Webspace wechseln)
                        Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

                        Kommentar


                        • #13
                          also ich musste bei mir den support anschreiben das sie bitte den port X udp für die ip Y freigeben .. haben sie umgehend gemacht
                          Gruß
                          Uzu

                          private Homepage

                          Kommentar


                          • #14
                            Original geschrieben von Laire
                            Also ich habe bisher nur mit Servern auf Rcon Basis gearbeitet, dort bekomme ich mit folgendem Script eine Statusmeldung zurück:


                            PHP-Code:
                            $ip "12.34.567.89"
                            $port 28960
                            $challenge "\xFF\xFF\xFF\xFF\x02getstatus\x0a\x00";
                            $fp = @fsockopen("udp://$ip"$port$errno$errstr1);
                            stream_set_timeout($fp10);
                            stream_set_blocking($fptrue); // SET TIMEOUT FOR OFFLINE SERVERS
                            fwrite($fp$challenge);
                            $buffer fread($fp4096 10);
                            fclose($fp); 

                            Super, danke..
                            gameserver

                            Kommentar

                            Lädt...
                            X