Jump to content
GIGN Forum

Cs Server Query (jautajums Ekspertiem)


RaaapuLis
 Share

Recommended Posts

Sveiki, tatad man ir papusei pashtaisits servera query`s

<?php




$server="255.255.255.255";
$port="27015";


$qw=chr(32);
$fp = fsockopen ("udp://".$server,$port);
if (!$fp)
{
echo "Kluda: $errno - $errstr<br>\n";

}
else {
fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00".chr(10));
$start=time();
socket_set_timeout($fp,1);
$st=fread($fp,1);
$r=socket_get_status($fp);
$r=$r["unread_bytes"];
$st.=fread($fp,$r);
fclose($fp);
$st=substr($st,5);
$adrese=SubStr($st,0,StrPos($st,chr(0)));
$adrese=str_replace(chr(0),"|",$address);
$st=SubStr($st,StrPos($st,chr(0))+1);
$name=SubStr($st,0,StrPos($st,chr(0)));
$st=SubStr($st,StrPos($st,chr(0))+1);
$mape=SubStr($st,0,StrPos($st,chr(0)));
$st=SubStr($st,StrPos($st,chr(0))+1);
$st=SubStr($st,StrPos($st,chr(0))+1);
$st=SubStr($st,StrPos($st,chr(0))+1);
$plon=ord(SubStr($st,0,1));
$plmax=ord(SubStr($st,1,1));

}
$bilde="<img src='/bildes/cs_maps/$map.jpg' style='border:1px solid grey;' border='1'>";

echo "
<br><center>
<b>$nosaukums</b> <br>
$adrese <br>
$bilde<br>
<b>Mape:</b> $mape<br>
<b>Speletaji:</b> $plon / $plmax <br>
<b>Statuss:</b> ";

if ($mape=="")
{
print "<font color=red>Izslegts<br></font>";
}
else
{
print "<font color=green>Ieslegts<br></font>";
}
echo "<br><br></center>
";

?>

Vai varetu kads pateikt kaa izdabut online speletaju name, score, un online time?

Edited by RaaapuLis
Link to comment
Share on other sites

Tava nolasīšanas metode ne vienmēr nostrādās, jo serveris var atgriest datus vairāk kā vienā paketē vai arī kompresētus...

Ja tu draudzējies ar to lietu, kas ir starp pleciem, tad tev noderēs šis te topiks.

Lai nolasītu player vārdus, tev jānosūta ir headeris, kas sastāv no 4 0xff baitiem, kā arī x55. Atbildē tev ir jāsaņēm 0x45 baits, pēc kā seko 2 baitu cipars ar kopējo spēlētāju skaitu un pēctam seko spēlētāju saraksts, kas ir formātā baits string long float (long = 4 baiti, float = 4 baiti)

vairāk info var izlasīt šeit:

http://developer.valvesoftware.com/wiki/Server_Queries

Link to comment
Share on other sites

es jau lasiju, bet man nesanak un tas ka ne vienmer strtadas jau saskaros ar sho problemu, vainigs fread, bet samainiju fread ar file_get_contents()

vai tad shite nau padoti tie xff un x55?

fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00\x55".chr(10));

Edited by RaaapuLis
Link to comment
Share on other sites

vai tad shite nau padoti tie xff un x55?

fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00\x55".chr(10));

ar tavu fwrite() tu pieprasi servera info... pleijeru sarakstu pieprasa ar

fwrite($fp, "\xFF\xFF\xFF\xFF\x55");

Es īsti neizprotu tavu domu gājienu ar file_get_contents()... tas ir tas pats kas novienkāršots fread().

Vai tu kādreiz vispār dokumentāciju izlasi? Vai tu iedziļinies rakstītajā? Izskatās, ka tu mēģini izspiest sūdu nepaverot kājas...

Link to comment
Share on other sites

neizmanto substr()... manā topikā ir ierakstītas ļoti labas funkcijas, kas izdabū ārā visu to, ko es tev aukstāk esmu minējis...

piemēram, ja tev atbildes dati ir mainīgais $st un tev no viņa vajag novākt headeri, kas ir 4 baiti (kas atbilst long datu tipam), tad tu taisi getlong($st). Pēctam tev jānolasa atbildes baits, izmanto funkciju $atbilde = getbyte($st) un pēctam pārbaudi if ( $abilde == 0x55 ) ... Katru reizi izsaucot kādu no get...() funkcijām, atbildes mainīgais automātiski tiks ar substr() saīsināts par N-simboliem, atkarībā no tā, kādu funkciju tu izsauci. Ja tu esi ticis līdz tam, ka $atbilde == 0x55, tad tu esi uz pareizā ceļa

p.s.

ja tu izmanto manu query() funkciju, tad 4 baitu headeris jau ir noņemts pie datu atgriešanas

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...