06.02.2011, 06:24
Querнa saber si alguno programador PHP tiene idea como sacar informaciуn de un servidor de SAMP mediante el uso de sockets por el puerto UDP. He visto varios scripts sobre esto, pero la idea serнa entender como esta hecha la misma. Desde ya muchas gracias.
Si me pudieran explicar este script, se los agradeceria. En especial la parte que empieza por fwrite y pareciera que concatena una 'i' a la variable 'packet'.
Si me pudieran explicar este script, se los agradeceria. En especial la parte que empieza por fwrite y pareciera que concatena una 'i' a la variable 'packet'.
PHP код:
<?php
if (isset($_GET['source'])) {
highlight_file(__FILE__);
exit;
}
if (!isset($ip))
$ip = '188.165.206.114';
if (!isset($port))
$port = 7777;
$fp = fsockopen('udp://' . $ip, $port, $errno, $errstr);
if (!$fp)
{
echo "<tr><td bgcolor=\"#2B5486\">Socket Error: $errno - $errstr</td></tr>\n";
}
else
{
$packet = 'SAMP';
$packet .= chr(strtok($ip, '.'));
$packet .= chr(strtok('.'));
$packet .= chr(strtok('.'));
$packet .= chr(strtok('.'));
$packet .= chr($port & 0xFF);
$packet .= chr($port >> 8 & 0xFF);
fwrite($fp, $packet.'i');
fread($fp, 11);
$is_passworded = ord(fread($fp, 1));
$plr_count = ord(fread($fp, 2));
$max_plrs = ord(fread($fp, 2));
$strlen = ord(fread($fp, 4));
$hostname = fread($fp, $strlen);
$strlen = ord(fread($fp, 4));
$gamemode = fread($fp, $strlen);
$strlen = ord(fread($fp, 4));
$mapname = fread($fp, $strlen);
echo ' <tr><td bgcolor="#2B5486" colspan="2" align="center"><b>' . $hostname . '</b></td></tr>'."\n";
echo ' <tr><td bgcolor="#2B5486" width="100">Players: </td><td bgcolor="#2B5486" width="250">' . $plr_count . ' / ' . $max_plrs . '</td></tr>'."\n";
echo ' <tr><td bgcolor="#2B5486">GameMode: </td><td bgcolor="#2B5486">' . $gamemode . '</td></tr>'."\n";
echo ' <tr><td bgcolor="#2B5486">MapName: </td><td bgcolor="#2B5486">' . $mapname . '</td></tr>'."\n";
if ($is_passworded)
{
echo ' <tr><td bgcolor="#2B5486">Contrasenia: </td><td bgcolor="#2B5486">Si</td></tr>'."\n";
} else {
echo ' <tr><td bgcolor="#2B5486">Contrasenia: </td><td bgcolor="#2B5486">No</td></tr>'."\n";
}
fwrite($fp, $packet.'c');
fread($fp, 11);
$plr_count = ord(fread($fp, 2));
if ($plr_count > 0)
{
echo ' </table><br>'."\n";
echo ' <table width="350" bgcolor="#000000" cellpadding="4" cellspacing="1" align="center">'."\n";
echo ' <tr><td bgcolor="#2B5486" colspan="2" align="center"><b>Players:</b></td></tr>'."\n";
echo ' <tr><td bgcolor="#2B5486" align="center" width="250"><b>Player</b></td><td bgcolor="#2B5486" align="center" width="100"><b>Score</b></td></tr>'."\n";
for ($i=0; $i<$plr_count; $i++)
{
$strlen = ord(fread($fp, 1));
$plrname = fread($fp, $strlen);
$score = ord(fread($fp, 4));
echo ' <tr><td bgcolor="#2B5486">' . $plrname . '</td><td bgcolor="#2B5486">' . $score . '</td></tr>'."\n";
}
}
fclose($fp);
}
?>