socket_read question, probleme
Posté : 06 déc. 2012, 00:50
Bonjour,
Je travaille sur un projet perso, et j'ai un souci au niveau de la gestion de socket en multi client.
d'aprés php.net, il est possible de passer a la fonction socket_read(), soit une socket créé par socket_create soit accepté par socket_accept.
Si je comprend bien, celle renvoyé par socket_create est la socket serveur, et celles renvoyés par socket_accept sont les socket client, est ça ?
Si oui sa m'arrangerai de mettre ma socket serveur en parametre de socket_read pour attendre que un client parmi plusieurs ecrive dans la socket.
Plus clairement, j'accepte 4 clients et attende que l'un d'entre eux ecrive, mais je ne peux pas mettre un une socket client precise dans socket_read vu que je sais pas qui va ecrire ...
Et quand je met la socket serveur sa plante...
Je travaille sur un projet perso, et j'ai un souci au niveau de la gestion de socket en multi client.
d'aprés php.net, il est possible de passer a la fonction socket_read(), soit une socket créé par socket_create soit accepté par socket_accept.
Si je comprend bien, celle renvoyé par socket_create est la socket serveur, et celles renvoyés par socket_accept sont les socket client, est ça ?
Si oui sa m'arrangerai de mettre ma socket serveur en parametre de socket_read pour attendre que un client parmi plusieurs ecrive dans la socket.
Plus clairement, j'accepte 4 clients et attende que l'un d'entre eux ecrive, mais je ne peux pas mettre un une socket client precise dans socket_read vu que je sais pas qui va ecrire ...
Et quand je met la socket serveur sa plante...
Code : Tout sélectionner
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() a échoué : raison : " . socket_strerror(socket_last_error()) . "\n";
}
if (socket_bind($sock, $this->address, $this->port) === false) {
echo "socket_bind() a échoué : raison : " . socket_strerror(socket_last_error($sock)) . "\n";
}
if (socket_listen($sock, 5) === false) {
echo "socket_listen() a échoué : raison : " . socket_strerror(socket_last_error($sock)) . "\n";
}
/*Accepte client */
for($i=0;$i<$this->maxClient;$i++){
if(($client = socket_accept($sock)) === false){
echo "socket_accept() a échoué : raison : " . socket_strerror(socket_last_error($sock)) . "\n";
break;
}else echo "<br/>Client $client[$i] has connected\n";
/*on stock les clients(socket) dans un membre de l'objet joueur*/
$this->joueurs[$i] = new Joueur($client,$i);
}
while($start){
$messageClient = socket_read($sock , 1024);//PHP_NORMAL_READ
/*suite .....*/