1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| <?php
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); //Création de la ressource socket
//A partir d'ici petite difference
//On bind la socket sur l'ip et le port, qui va permetre d'ecouter la socket
socket_bind($socket,"127.0.0.1","8089"); //On attribut une ressource de connexion à la socket (Va permetre à un client de se connecter à celui-ci)
socket_listen($socket); //On ecoute la socket pour de nouvelles connexion
//Quelque variable de sauvegardes
$sockets = array(); //liste de touts les sockets
$clients = array($socket); //Liste de touts les clients
$client = null; //Contiendra la socket actuelle du client
while(true)
{
//on stocke le tableau $clients dans la variable sockets de type array
$sockets = $clients;
/* Ici on selectionne les sockets connecté, lorsque la condition est passé
cela veut dire que aucune socket n'est occupé*/
if (socket_select($sockets, $write = NULL, $except = NULL, 0) < 1)
continue;
//Si un nouveau client est ici
if (in_array($socket, $sockets))
{
//On l'accept et on sauvegarde sa socket dans $clients et $client
$clients[] = $client = socket_accept($socket);
//On supprime le contenu de $sockets (qui est une variable de stockage du socket temporaire) si le socket actuelle est dans l'array
$key = array_search($socket, $sockets);
unset($sockets[$key]);
}//end if
foreach($sockets as $my_socket)
{
$read = socket_read($my_socket,1000000);
//Si un des clients ne reçois pas les méssages, alors on le supprime de la liste et on envoie un message général
if($read==false)
{
$key = array_search($socket, $clients);
unset($clients[$key]);
socket_write($my_socket,"Client disconnected");
}
}
socket_close($socket);
?> |
Partager