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...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
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 .....*/