[Sockets]Streamreader problem

Badmaster

Mitglied
Also hab mich mal ein wenig umgeschaut was es so für Half-Life Query Tools gibt und hab nach längerem suchen zwei gefunden... die gaben mir wenigstens die commands für weiteren input (in diesem falle "ÿÿÿÿdetails").
Doch bei meinem kleinen versuchsscript scheint php verrückt zu spielen...
PHP:
$fp = fsockopen("udp://62.80.117.45", 21300, $errno, $errstr, 5);
if(!$fp) echo "$errstr ($errno)<br>\n";
else {
set_socket_blocking($fp, FALSE);
//send the query

    $outstring="ÿÿÿÿdetails";

    fwrite($fp,$outstring);

$bytein=fread($fp,1);
$i_count=0;


    $inbyte=fread($fp,1);

    while($inbyte=="")

     {

      $inbyte=fread($fp,1);

     }


while($bytein!=""&&$i_count<20)
{
$bytein=fread($fp,1);
$recieved .= $bytein;
$i_count++;
}

echo "Empfangen:\n";
echo $recieved;
echo "\n\n<br><br>Byte:".$bytein;

fclose($fp);


}

Mit dem heimischen windows PHP interpreter krieg ich ein
Code:
<b>Fatal error</b>:  Maximum execution time of 30 seconds exceeded in <b>E:\Eigene Dateien\Projekte\PHP\sockets\hl_script.php</b> on line <b>56</b><br>
line 56 ist:
PHP:
    while($inbyte=="") #<----

     {

      $inbyte=fread($fp,1);

     }

Bei meinem externen Host(errormsgs sind abgeschaltet) gibts einfach die leeren daten zurück (also hat connection funktioniert aber halt keine daten... seltsam...)

ich hab denn mal meinen sniffer angeschmissen und bemerkt, dass ich tatsächlich ein detail packet zugeschickt bekomme:
Code:
.0O......B.~..E.....@.7...>Pu-..."S4.j...%....m62.80.117.45:21300.#modguide.ns v1.04 | 1 | www.NaTuRaL-SeLeCtIoN.de.ns_eclipse.ns.Natural Selection....dl..www.natural-selection.org.http://www.natural-selection.org/......@......
doch wie gesagt gibts Zuhause ein Timeout und aufm externen keine daten...

Socketfunktionen wurden auf dem externen bereits erfolgreich getestet ... da liegt das problem also auch ned...

jemand ne ahnung? sehe wohl den Wald vor lauter bäumen nicht mehr ;)
danke für eure Hilfe... :)

Gruss Badmaster
 
Hm, ich hab da vor längerer Zeit mal mit Gameserver-Abfragen rumgespielt... hab mir jetzt deinen Code nicht angeschaut, aber vielleicht hilft's ja :)

PHP:
<?php

function int32($bytes)
{
	$int32 = ord(substr($bytes, -3, 1))*255 + ord(substr($bytes, -4, 1));
	return $int32;
}

$serverip = "62.80.117.45";
$serverport = 21300;

$int32ff = chr(255).chr(255).chr(255).chr(255);
$con = fsockopen("udp://".$serverip, $serverport);
if ($con) {
	fwrite($con, $int32ff."players".chr(0));
	$check = fread($con, 4);
	if ($check != $int32ff) die("Error: Int32 signature not detected!");
	$response = fread($con, 1);
	if ($response != 'D') die("Error: 'player' response not detected!");
	$players = ord(fread($con, 1));
	echo $players." players<br>";
	echo "Player list:<br>";
	echo "<table><tr><td>client number/index</td><td>player name</td><td>client's frags total</td></tr>\n";
	for ($p=0;$p<$players;$p++)
	{
		echo "<tr><td>".ord(fread($con, 1))."</td><td>";
		while (($name=fread($con, 1))!=chr(0))
		{
			echo $name;
		}
		echo "</td><td>".int32(fread($con, 4))."</td></tr>\n";
		fread($con, 4);
	}
	echo "</table>";
}
fclose($con);
?>
 
wieso brauchst du eine ganzzahl??? ich will doch einen string und keine nummern... z.B. servernamen... hmmmm warum also konvertieren? von sowas hab ich in den beiden scripten nix gesehen... ausserdem bringt mir das leider nix da ich ja eh immer nur "" aus dem stream lese, also nichts...
aber warum? :(
 
Na schau dir doch mein Script an. Ich lese die Anzahl der Spieler (=> Ganzzahl), deren Clientnummer (=> Ganzzahl) sowie deren Frags (=> Ganzzahl) aus... Du musst mein Script eigentlich nur noch auf die Antwort auf eine detail-Abfrage anpassen.
 
Original geschrieben von Badmaster
lol,
is aber überhaupt nicht mein Problem... siehe oben...
Ich versuch dir zu helfen, poste dir ein fertiges Script (welches du eigentlich wie gesagt nur anpassen müsstest, schon wäre dein Problem gelöst), beantworte deine Fragen und dann muss ich mich so von der Seite anmachen lassen. In Zukunft kannst du dir selber helfen, viel Spaß dabei.

:(

PS: Netiquette lesen würde auch nicht schaden.
 
dein script und deinen willen mir zu helfen in ehren, aber ich seh keinen grund warum du die daten aus dem packet "entschlüsseln" müsstest (hat wie schon erwähnt keines der gefundenen scripte gebraucht). Mein Problem ist nunmal, dass ich das packet zwar erhalte aber ned auslesen kann... eben wie oben beschrieben... muss ich ja wohl nicht zweimal posten oder?
 
Zurück