PHP gevorderde |
|
Wat voor een spel en welk spel? Een zelf gemaakt of een al reeds bestaand?
Sandernerd, waarom pingen ? Daarmee weet je eigenlijk enkel de duur van het verzenden van een pakket of een strook data.
Dit is een stuk uit een PHP script dat ik gemaakt heb om te kijken of een server aan staat of niet.
<?php
if (!extension_loaded('sockets')) { /* Zijn er wel PHP sockets beschikbaar? */
/* Er zijn geen PHP Sockets beschikbaar of de extensie is niet ingeschakeld */
echo 'Geen PHP sockets beschikbaar.';
}
/* Maak een nieuwe socket aan */
$socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) { /* Is de socket aangemaakt? */
@socket_close($socket); /* Sluit de socket voor het geval dat */
$err = @socket_last_error($socket);
echo 'De socket kon niet aangemaakt worden (Error '.$err.': '.@socket_strerror($err).')';
}
$resultaat = true;
/* Probeer de socket op de niet-blokkerende modus te zetten. */
if (!@socket_set_nonblock($socket) && $socket) {
@socket_close($socket); /* Sluit de socket voor het geval dat */
$err = @socket_last_error($socket);
echo 'De socket kon niet in niet-blokkerende modus gezet worden (Error '.$err.': '.@socket_strerror($err).')';
}
$time = time();
/* Probeer een verbinding aan te maken */
while (!@socket_connect($socket, '127.0.0.1', 2890) && $result && $socket) {
$err = @socket_last_error($socket);
if ($err == 115 || $err == 114) {
if ((time() - $time) >= 25) { /* Hij stop na 25 seconden van proberen */
@socket_close($socket);
$result = false;
}
sleep(1);
continue;
} else {
@socket_close($socket); /* Sluit de socket voor het geval dat */
$err = @socket_last_error($socket);
echo 'De socket kon niet verbinden (Error '.$err.': '.@socket_strerror($err).')';
}
}
/* Zijn we verbonden? */
if ($resultaat) {
@socket_close($socket);
echo 'De server is online';
} else {
@socket_close($socket); /* Voor het geval dat */
echo 'De server is offline';
}
?>
<?php /* Er zijn geen PHP Sockets beschikbaar of de extensie is niet ingeschakeld */ echo 'Geen PHP sockets beschikbaar.'; } /* Maak een nieuwe socket aan */ if (!$socket) { /* Is de socket aangemaakt? */ @socket_close($socket); /* Sluit de socket voor het geval dat */ } $resultaat = true; /* Probeer de socket op de niet-blokkerende modus te zetten. */ @socket_close($socket); /* Sluit de socket voor het geval dat */ echo 'De socket kon niet in niet-blokkerende modus gezet worden (Error '.$err.': '.@socket_strerror($err).')'; } /* Probeer een verbinding aan te maken */ while (!@socket_connect($socket, '127.0.0.1', 2890) && $result && $socket) { if ($err == 115 || $err == 114) { if ((time() - $time) >= 25) { /* Hij stop na 25 seconden van proberen */ $result = false; } continue; } else { @socket_close($socket); /* Sluit de socket voor het geval dat */ } } /* Zijn we verbonden? */ if ($resultaat) { echo 'De server is online'; } else { echo 'De server is offline'; } ?>
Als je bv. informatie wilt hebben over het aantal spelers dan moet je pakketjes sturen dit kan je doen met behulp van PHP.net: socket_read en PHP.net: socket_write.
Citaat: Ik neem aan dat je het spel dan zelf hebt gemaakt, anders gaat het niet.
Het gaat wel maar het probleem is dat je meestal eerst moet uitzoeken hoe het protocol werkt. Dat neemt meestal veel tijd in beslag als je enkel PHP kent of de basis van C of C++.
M.v.g. Godlord. |