Bonjour =)

Afin d'apprendre a manier les sockets, je m'essaye a des scripts type "Chat". Actuellement je suis sur un script qui ne fonctionne pas parfaitement.

A l'heure actuelle, il ne s'affiche rien, mais je déduis que l'échange de sockets s'effectue a peut prêt bien.

Voici le script faisant office de serveur:
Code php : 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
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
<?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)
        {
        ob_start();
        echo"Lancement du serveur...\n";
        $this->clients=array();
 
        //Création de la socket
        $this->socket = socket_create(AF_INET, SOCK_STREAM, 0);
        //on lie la ressource sur laquelle le serveur va écouter
        @socket_bind($this->socket, $adresse, $port) or die("Port déja utilise\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";
                        ob_flush();
    					flush();
                        }
                }
        }
}
$chat = new Chat_Server();
$chat->Start('127.0.0.1',10001);
?>

Script censé récupéré et afficher les sockets:
Code php : 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
31
32
33
34
<?php
set_time_limit(0);
 
$adresse='127.0.0.1';
$port=10001;
ob_start();
$pseudo=$_POST['pseudo'] ;
 
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if(!@socket_connect($socket, $adresse, $port))
        echo "Le serveur n'est pas lancé";
else
        {
        $message = $pseudo." /connect";
        socket_write($socket, $message , strlen($message));
        while(true)
                {
                if($input = @socket_read($socket, $port))
                        {
                        $pseudo = stripslashes(utf8_decode(substr($input , 0 , strpos($input , ' '))));
                        $message = stripslashes(utf8_decode(substr($input , strpos($input , ' ')+1 , strlen($input))));
                        echo '['.$pseudo.']: '.$message.'<br />';
                        ob_flush();
    					flush();
                        }
                else
                        {
                        echo "Le serveur a été éteint";
                        break;
                        }
                }
        socket_close($socket);
        }
?>

Et le script qui envoie les chaine au serveur:
Code php : 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
<?php   
$adresse='127.0.0.1';
$port=10001;
if(!empty($_GET['message']))
        {
        //Création de la socket
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        //Connexion au serveur
        socket_connect($socket,$adresse,$port);
        //Construction du paquet à envoyer au serveur
        $paquet=str_replace(' ' , '&nbsp;' ,$_GET['pseudo']).' '.$_GET['message'];
        //Ecriture du paquet vers le serveur
        socket_write($socket,$paquet,strlen($paquet));
        //Fermeture de la connexion
        socket_close($socket);
        }
?>

J'ai l'impression que les sockets s'échange, mais que l'affichage ne s'effectue pas (flush?)

Merci d'avance a qui me donnera une piste ou un coup de main