tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
302
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Nord-Süd-Richtung Nord-Süd-Richtung ist offline Mitglied Platin
    Registriert seit
    Feb 2008
    Beiträge
    522
    Hi

    ich habe ein ärgerliches Problem mit der Funktion fgets. Ich schreibe zur Zeit ein sogenanntes Rcon-Tool für Call of Duty 4, mit dem man dem Gameserver per Browser Befehle zukommenlassen kann, ohne selbst im Spiel eingeloggt zu sein.
    Das ganze funktioniert, bis auf einen Haken. Wenn ich die Spielerliste holen möchte (befehl /rcon status) gibt es genau 2 Optionen.
    1) Ich erhalte nicht die ganze Fehler liste
    2) Ich lande in einer sehr langen Schleife, und erhalte gar kein Ergebnis (wenn die Seite zu Ende geladen hat => Quelltext wird nicht weiter geladen.)

    Der Code:
    PHP-Code:
    <?php
    error_reporting
    ('E_ALL');
    class 
    rcon{
      private 
    $ip;
      private 
    $port;
      private 
    $pass;
      private 
    $command;
      private 
    $handle;
      public function 
    __construct($ip,$port,$pass){
        
    $this->ip $ip;
        
    $this->port $port;
        
    $this->pass $pass;
        
    $this->command str_repeat(chr(255), 4);
      }
      public function 
    connect(){
        
    $this->handle fsockopen('udp://'.$this->ip$this->port$errno$errstr);
        if (!
    $this->handle)
          die(
    'Unable to open socket connection: '.$errstr.' (#'.$errno.')');

      }
      public function 
    disconnect(){
        
    fclose($this->handle);
      }
      public function 
    cmd($cmd){
        if( !
    fwrite($this->handle,$this->command.' rcon '.$this->pass.' '.$cmd."\n") )
          die(
    'Failed to send command.');
        
    $fp $this->handle;
        
    $runs 1;
        
    $response '';
        while( 
    true ){
            if( 
    feof($this->handle) )
              die(
    'FEOF');
            
    $f fgets($fp);
            
    $response .= $f;
            if( 
    feof($this->handle) )
              die(
    'FEOF');
            if(
    $runs == 25){ break;}else $runs++; 
        }
        return 
    str_replace('','',$response);
      }
    }
    $rcon = new rcon('94.76.214.117'1024'*********');
    $rcon->connect();
    ?>
    <pre>
    <? var_dump($rcon->cmd('status')); ?>
    </pre>
    <?php
    $rcon
    ->disconnect();
    ?>
    Anmerkungen:
    -Es wird _nie_ FEOF ausgegeben.
    -Jenachdem wieviele Spieler online sind (sprich Länge des Rückgabestrings) müsste die Anzahl bei $runs erhöht oder verringert werden um den kompletten Satz zu erhalten.
     
    Napoleon trug rote Kleidung, damit seine Soldaten nicht sahen, dass er verwundet war.
    Die Naz!s trugen braune Hosen ...

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist gerade online Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Moin,

    kommt denn was an mit fgets()? Wenn ja, kannst du evtl. mal an dem Ini-Paramter default_socket_timeout drehen?
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

Ähnliche Themen

  1. [C] Problem mit fgets()
    Von EngGi im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 05.11.09, 16:42
  2. problem mit fgets
    Von jogisarge im Forum PHP
    Antworten: 4
    Letzter Beitrag: 06.06.08, 22:45
  3. Problem mit gets() / fgets()
    Von BOND_WR im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 05.09.07, 10:57
  4. Problem mit fgets() in c
    Von maltor im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 03.05.06, 20:07
  5. Mysteriöses fgets-Problem!
    Von revelation im Forum PHP
    Antworten: 4
    Letzter Beitrag: 15.04.04, 23:11