Announcement

Collapse
No announcement yet.

Sockets ansprechen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Sockets ansprechen

    Hallo Leute,

    ich habe ein kleines Problem,
    nun ich habe versucht eine Verbindung über einen TCP Socket auf den Query-Port auf unserem Teamspeak zu verbinden um daraus die Aktuelle Online-Anzahl der Leute und die Maximalanzahl raus zu bekommen.

    Nunja, die 1. Ausgabe sieht dermassen aus:
    TS3
    und die 2. jeweils:
    Welcome to the TeamSpeak 3 ServerQuery interface, type "help" for a list of commands and "help " for information on a specific command.
    was allerdings auch richtig ist, sobald ich nun ein 'help' übergebe, dann gibt er mir absolut nicht aus.

    Der Code nochmals:
    PHP Code:
    <?php

    final class eTeamspeak {
        private 
    $socket;
        private 
    $userData;
        
        public function 
    __construct($address$queryPort$superAdmin$superPasswd$serverID) {
            if(!
    preg_match('/^\d+\.\d+\.\d+\.\d+$/'$address))
                
    $address gethostbyname($address);
            
            
    $this->socket socket_create(AF_INETSOCK_STREAMSOL_TCP) or die('Could not create socket');
            
    socket_connect($this->socket$address$queryPort) or die('Could not connect to server');
            
            
    $this->getReturn();
            
            if(!
    $this->socket)
                die(
    'ERROR: '.$errno.' - '.$errstr);
            
            
    $this->userData['SAUsername']    = $superAdmin;
            
    $this->userData['SAPassword']    = $superPasswd;
            
    $this->userData['ServerID']        = $serverID;
            
            
    $this->sendCommand('login '.$this->userData['SAUsername'].' '.$this->userData['SAPassword']);
            
    $this->getReturn();
            
            
    $this->sendCommand('use sid='.$this->userData['ServerID']);
            echo 
    $this->getReturn(TRUE);
            
            
    $this->sendCommand('help');
            echo 
    $this->getReturn(TRUE);
            
            die();
        }
        
        public function 
    __destruct() {
            
    $res socket_close($this->socket);
            if(
    $res)
                echo 
    'Socket Error: '.socket_strerror(socket_last_error());
        }
        
        private function 
    sendCommand($command) {
            return 
    socket_write($this->socket$command."\r\n"strlen($command."\r\n"));
        }
        
        private function 
    getReturn($nl2br NULL) {
            
    $text socket_read($this->socket1024PHP_NORMAL_READ);
            return 
    $nl2br nl2br($text) : $text;
        }
        
        public function 
    getServerinfo() {
            
    $this->sendCommand('serverlist -uid '.$this->userData['ServerID']);
            
    $result $this->getReturn();
            
            
    deb($result);
            
            
    preg_match('#virtualserver_id='.$this->userData['ServerID'].' virtualserver_port=[0-9]* virtualserver_status=online virtualserver_clientsonline=([0-9]+) virtualserver_queryclientsonline=([0-9]+) virtualserver_maxclients=([0-9]+)#'$result$pregResult);
            
            
    deb($vars);
            
            return 
    $vars;
        }
    }
    Ich habe erstmal alles in den Konstruktor geschmissen, also nicht wundern...
    Jedenfalls ist die Funktion 'deb($var)' dasselbe wie: 'die('<pre>'.print_r($var ,TRUE))'

  • #2
    PHP_NORMAL_READ - Lesevorgänge werden bei \n oder \r beendet.

    Sollte der Test mit Umbrüchen beginnen, siehst du nichts.
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post
      PHP_NORMAL_READ - Lesevorgänge werden bei \n oder \r beendet.

      Sollte der Test mit Umbrüchen beginnen, siehst du nichts.
      Würde es beendet werden,
      dann würde er bei der 2. Ausgabe zwischendurch aufhören.

      Ich bekomme eben nach dieser 2. Zeile keine weitere mehr zum vorschein,
      egal was ich abfrage. Weitere Tipps ?

      Comment


      • #4
        dann würde er bei der 2. Ausgabe zwischendurch aufhören.
        Die sehe ich nicht.

        $this->sendCommand('help');
        echo
        $this->getReturn(TRUE);

        die();


        In übrigen macht dieser Parameter keine Sinn im Zusammenhang mit
        return $nl2br ? nl2br($text) : $text;

        Weitere Tipps ?
        Teste das mal mit Telnet, was kommen müsste

        EDIT

        Wo erfolgt die Ausgabe, wenn gleich nach dem lesen des Textes ein "die" gemacht wird? Ev. das mal entfernen...

        Zuletzt editiert von Christian Marquardt; 31.12.2011, 09:08.
        Christian

        Comment


        • #5
          ja die sehe ich auch nicht (von 'help', das ist jeweils die 3. Ausgabe)

          Ich sehe darin auch kein Sinn ein nl2br zu benutzen, habe es aber in der Funktion gelassen, da ich es evtl. später für Vollwertige ausgaben gut benutzen könnte.

          und die Ausgabe erfolgt direkt nach dem sendCommand, also in unserem Fall dem "echo $this->getReturn(TRUE);"

          Werde es gleich mal mit Telnet testen und berichten.

          Comment

          Working...
          X