function QueryMinecraft($IP, $Port = 25565, $Timeout = 2) { $Socket = Socket_Create(AF_INET, SOCK_STREAM, SOL_TCP); Socket_Set_Option($Socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => (int) $Timeout, 'usec' => 0)); Socket_Set_Option($Socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => (int) $Timeout, 'usec' => 0)); if ($Socket === FALSE || @Socket_Connect($Socket, $IP, (int) $Port) === FALSE) { return FALSE; } Socket_Send($Socket, "þ", 2, 0); $Len = Socket_Recv($Socket, $Data, 512, 0); Socket_Close($Socket); if ($Len < 4 || $Data[0] !== "ÿ") { return FALSE; } $Data = SubStr($Data, 3); // Strip packet header (kick message packet and short length) $Data = iconv('UTF-16BE', 'UTF-8', $Data); // Are we dealing with Minecraft 1.4+ server? if ($Data[1] === "§" && $Data[2] === "1") { $Data = Explode("", $Data); return array('HostName' => $Data[3], 'Players' => IntVal($Data[4]), 'MaxPlayers' => IntVal($Data[5]), 'Protocol' => IntVal($Data[1]), 'Version' => $Data[2]); } $Data = Explode("§", $Data); return array('HostName' => SubStr($Data[0], 0, -1), 'Players' => isset($Data[1]) ? IntVal($Data[1]) : 0, 'MaxPlayers' => isset($Data[2]) ? IntVal($Data[2]) : 0, 'Protocol' => 0, 'Version' => '1.3'); }
public function Connect() { $this->Socket = Socket_Create(AF_INET, SOCK_STREAM, SOL_TCP); Socket_Set_Option($this->Socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => $this->Timeout, 'usec' => 0)); Socket_Set_Option($this->Socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $this->Timeout, 'usec' => 0)); if ($this->Socket === FALSE || @Socket_Connect($this->Socket, $this->ServerIP, $this->ServerPort) === FALSE) { throw new MinecraftPingException('Failed to connect or create a socket'); } }
function QueryMinecraft($IP, $Port = 25565, $Timeout = 2) { $Socket = Socket_Create(AF_INET, SOCK_STREAM, SOL_TCP); Socket_Set_Option($Socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => (int) $Timeout, 'usec' => 0)); if ($Socket === FALSE || @Socket_Connect($Socket, $IP, (int) $Port) === FALSE) { return FALSE; } Socket_Send($Socket, "þ", 1, 0); $Len = Socket_Recv($Socket, $Data, 256, 0); Socket_Close($Socket); if ($Len < 4 || $Data[0] != "ÿ") { return FALSE; } $Data = SubStr($Data, 3); $Data = iconv('UTF-16BE', 'UTF-8', $Data); $Data = Explode("§", $Data); return array('HostName' => SubStr($Data[0], 0, -1), 'Players' => isset($Data[1]) ? IntVal($Data[1]) : 0, 'MaxPlayers' => isset($Data[2]) ? IntVal($Data[2]) : 0); }
function QueryMinecraft($IP, $Port) { $Socket = Socket_Create(AF_INET, SOCK_STREAM, SOL_TCP); Socket_Set_Option($Socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => 2, 'usec' => 0)); Socket_Set_Option($Socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 2, 'usec' => 0)); if ($Socket === FALSE || @Socket_Connect($Socket, $IP, (int) $Port) === FALSE) { return FALSE; } Socket_Send($Socket, "�", 2, 0); $Len = Socket_Recv($Socket, $Data, 512, 0); Socket_Close($Socket); if ($Len < 4 || $Data[0] !== "�") { return FALSE; } $Data = SubStr($Data, 3); $Data = iconv('UTF-16BE', 'UTF-8', $Data); if ($Data[1] === "�" && $Data[2] === "1") { $Data = Explode("", $Data); return array('HostName' => $Data[3], 'Players' => IntVal($Data[4]), 'MaxPlayers' => IntVal($Data[5]), 'Protocol' => IntVal($Data[1]), 'Version' => $Data[2]); } $Data = Explode("�", $Data); return array('HostName' => SubStr($Data[0], 0, -1), 'Players' => isset($Data[1]) ? IntVal($Data[1]) : 0, 'MaxPlayers' => isset($Data[2]) ? IntVal($Data[2]) : 0, 'Protocol' => 0, 'Version' => '1.3'); }
<?php #------------------------------------------------------------------------------- /** @author Великодный В.В. (Joonte Ltd.) */ #------------------------------------------------------------------------------- $Socket = Socket_Create(AF_INET, SOCK_STREAM, SOL_TCP); if (!$Socket) { return ERROR | @Trigger_Error('[Debugger]: не создать сокет'); } #------------------------------------------------------------------------------- if (!Socket_Bind($Socket, '127.0.0.1', 9000)) { return ERROR | @Trigger_Error('[Debugger]: не удалось построить сокет'); } #------------------------------------------------------------------------------- if (!Socket_Listen($Socket)) { return ERROR | @Trigger_Error('[Debugger]: не удалось установить сокет на прослушивание'); } #------------------------------------------------------------------------------- class Client { # Ссылка на поток public $Stream = NULL; #----------------------------------------------------------------------------- public function Connect(&$Stream) { #--------------------------------------------------------------------------- $this->Stream = $Stream; } #----------------------------------------------------------------------------- public function Disconnect() {