tu dis que le problème est la fermeture de la socket... alors que si tu regardes il y a bien à la fin "socket_close($this->client);"
Aurais tu un script qui fait la même chose pour expliciter l'utilisation de la fonction socket_bind ?
<?php set_time_limit(0); //On crée notre classe class Chat_Server { var $socket=NULL; var $client=NULL; //Méthode qui démarre le serveur function Start($adresse,$port) { echo"Lancement du serveur...\n"; $this->clients=array(); //Création de la socket $this->socket = socket_create(AF_INET, SOCK_STREAM,SOL_TCP); if($this->socket) { echo "creation de socket reussie !\n"; } // socket_close($this->socket); //on lie la ressource sur laquelle le serveur va écouter socket_bind($this->socket, $adresse,$port) or die("Port déja utilise\n"); echo socket_last_error()." "; echo socket_strerror(socket_last_error()); //socket_connect($this->socket, $adresse, $port) or die("Bug !\n"); //On prépare l'écoute socket_listen($this->socket); //Boucle infinie, car le serveur ne doit s'arrêter que si on lui demande while(true) { //Le code se bloque jusqu'à ce qu'une nouvelle connexion client soit établie $this->client = socket_accept($this->socket); //Cette méthode lit les données reçues par un client, et les redistribue $reception = socket_read($this->client , 255); $pseudo = substr($reception , 0 , strpos($reception , ' ')); $message = substr($reception , strpos($reception , ' ')+1 , strlen($reception)); //Le message est "/connect", donc on stocke la socket dans le tableau if($message == "/connect") { $this->clients[$pseudo]=$this->client; echo "$pseudo connected\n"; } //C'est donc un message : ici on va envoyer le message vers chacun des clients else { echo "Pseudo: [".$pseudo."] Message recu: [".$message."] Message envoye a : "; //On passe chaque case du tableau = chaque client, et on lui envoie le message foreach( $this->clients as $nom_case => $socket_en_cours) { //Si ça ne marche pas, c'est qu'il est déconnecté if(@socket_write($socket_en_cours, $reception, strlen($reception)) === false) { //La socket est enlevée du tableau unset($this->clients[$nom_case]); echo "[$nom_case s'est deconnecte]"; } else echo "$nom_case "; } //On ferme la socket qui vient de nous apporter un message socket_close($this->client); echo"\n"; flush(); } } } } $chat = new Chat_Server(); $chat->Start('192.168.x.x',35353); ?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question