To175 Posted May 24, 2014 Posted May 24, 2014 Hi, this code works for me : $fp = @fsockopen("mecraft.omgcraft.fr", "10252", $errno, $errstr, 1); But this doesn't work :http://pastebin.com/UC29WcpH Help me please !In server.properties I have the query=true Thanks
Tjoene Posted May 24, 2014 Posted May 24, 2014 What error do you get when you run the script?Also, are there any errors on the minecraft server itself?
To175 Posted May 24, 2014 Author Posted May 24, 2014 If I use this code, I have this error :Failed to receive challenge.CODE : <?php require __DIR__ . '/MinecraftQuery.class.php'; $Query = new MinecraftQuery( ); try { $Query->Connect( 'localhost', 25565 ); print_r( $Query->GetInfo( ) ); print_r( $Query->GetPlayers( ) ); } catch( MinecraftQueryException $e ) { echo $e->getMessage( ); } ?> With this class : <?php class MinecraftQueryException extends Exception { // Exception thrown by MinecraftQuery class } class MinecraftQuery { /* * Class written by xPaw * * Website: http://xpaw.ru * GitHub: https://github.com/xPaw/PHP-Minecraft-Query */ private $Socket; private $Challenge; private $Players; private $Info; public function Connect( $Ip = 'serveurmecraft.tk', $Port = 10252, $Timeout = 3 ) { if( $this->Socket = FSockOpen( 'udp://' . $Ip, (int)$Port ) ) { Socket_Set_TimeOut( $this->Socket, $Timeout ); if( !$this->GetChallenge( ) ) { FClose( $this->Socket ); throw new MinecraftQueryException( "Failed to receive challenge." ); } if( !$this->GetStatus( ) ) { FClose( $this->Socket ); throw new MinecraftQueryException( "Failed to receive status." ); } FClose( $this->Socket ); } else { throw new MinecraftQueryException( "Can't open connection." ); } } public function GetInfo( ) { return isset( $this->Info ) ? $this->Info : false; } public function GetPlayers( ) { return isset( $this->Players ) ? $this->Players : false; } private function GetChallenge( ) { $Data = $this->WriteData( "\x09" ); if( !$Data ) { return false; } $this->Challenge = Pack( 'N', $Data ); return true; } private function GetStatus( ) { $Data = $this->WriteData( "\x00", $this->Challenge . "\x01\x02\x03\x04" ); if( !$Data ) { return false; } $Last = ""; $Info = Array( ); $Data = SubStr( $Data, 11 ); // splitnum + 2 int $Data = Explode( "\x00\x00\x01player_\x00\x00", $Data ); $Players = SubStr( $Data[ 1 ], 0, -2 ); $Data = Explode( "\x00", $Data[ 0 ] ); // Array with known keys in order to validate the result // It can happen that server sends custom strings containing bad things (who can know!) $Keys = Array( 'hostname' => 'HostName', 'gametype' => 'GameType', 'version' => 'Version', 'map' => 'Map', 'numplayers' => 'Players', 'maxplayers' => 'MaxPlayers', 'hostport' => 'HostPort', 'hostip' => 'HostIp' ); foreach( $Data as $Key => $Value ) { if( ~$Key & 1 ) { if( !Array_Key_Exists( $Value, $Keys ) ) { $Last = false; continue; } $Last = $Keys[ $Value ]; $Info[ $Last ] = ""; } else if( $Last != false ) { $Info[ $Last ] = $Value; } } // Ints $Info[ 'Players' ] = IntVal( $Info[ 'Players' ] ); $Info[ 'MaxPlayers' ] = IntVal( $Info[ 'MaxPlayers' ] ); $Info[ 'HostPort' ] = IntVal( $Info[ 'HostPort' ] ); // Parse "plugins", if any if( $Info[ 'Plugins' ] ) { $Data = Explode( ": ", $Info[ 'Plugins' ], 2 ); $Info[ 'RawPlugins' ] = $Info[ 'Plugins' ]; $Info[ 'Software' ] = $Data[ 0 ]; if( Count( $Data ) == 2 ) { $Info[ 'Plugins' ] = Explode( "; ", $Data[ 1 ] ); } } else { $Info[ 'Software' ] = 'Vanilla'; } $this->Info = $Info; if( $Players ) { $this->Players = Explode( "\x00", $Players ); } return true; } private function WriteData( $Command, $Append = "" ) { $Command = "\xFE\xFD" . $Command . "\x01\x02\x03\x04" . $Append; $Length = StrLen( $Command ); if( $Length !== FWrite( $this->Socket, $Command, $Length ) ) { return false; } $Data = FRead( $this->Socket, 1440 ); if( StrLen( $Data ) < 5 || $Data[ 0 ] != $Command[ 2 ] ) { return false; } return SubStr( $Data, 5 ); } }
Tjoene Posted May 24, 2014 Posted May 24, 2014 If I use this code, I have this error : Failed to receive challenge. CODE : Connect( 'localhost', 25565 ); print_r( $Query->GetInfo( ) ); print_r( $Query->GetPlayers( ) ); } catch( MinecraftQueryException $e ) { echo $e->getMessage( ); } ?> I see that you are trying to connect to localhost.Shouldn't this be the address of your minecraft server?
To175 Posted May 24, 2014 Author Posted May 24, 2014 yep thanks, I have changed it with serveurmecraft.tk but that doesn't work...
To175 Posted May 27, 2014 Author Posted May 27, 2014 I have do it well but that dosen't work, why please ?
wolstech Posted May 27, 2014 Posted May 27, 2014 Replace the localhost with the IP or domain of your game server. IIRC from when you had the port opened, your game server is not at that .tk domain. Also, this thing requires rcon. Is the query option in your config enabled and does the query port match?
To175 Posted May 28, 2014 Author Posted May 28, 2014 http://pastebin.com/w0PGaPqrhttp://pastebin.com/3e3d1Uwghttp://pastebin.com/FYJnkW8mI have tried with 10252 and 40729 !it sais "Failed to receive challenge."
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now