Bonjour =)

Je suis en train de m'aventurer dans le socket en PHP. Et ce n'est pas une mince affaire ^^

Voici le bout de code que j'ai actuellement, script "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
<?php
error_reporting(E_ALL);
 
/* Autorise l'exécution infinie du script, en attente de connexion. */
set_time_limit(0);
 
/* Active le vidage implicite des buffers de sortie, pour que nous
 * puissions voir ce que nous lisons au fur et à mesure. */
ob_implicit_flush();
 
$address = '127.0.0.1';
$port = 10000;
 
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, $address, $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";
}
 
do {
    if (($msgsock = socket_accept($sock)) === false) {
        echo "socket_accept() a échoué : raison : " . socket_strerror(socket_last_error($sock)) . "\n";
        break;
    }
    /* Send instructions. */
    $msg = "Bienvenue sur le serveur de test PHP.\n Pour quitter, tapez 'quit'. Pour éteindre le serveur, tapez 'shutdown'.\n";
    socket_write($msgsock, $msg, strlen($msg));
 
    do {
        if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
            echo "socket_read() a échoué : raison : " . socket_strerror(socket_last_error($msgsock)) . "\n";
            break 2;
        }
        if (!$buf = trim($buf)) {
            continue;
        }
        if ($buf == 'quit') {
            break;
        }
        if ($buf == 'shutdown') {
            socket_close($msgsock);
            break 2;
        }
        $talkback = "PHP: You said '$buf'.\n";
        socket_write($msgsock, $talkback, strlen($talkback));
        echo "$buf\n";
    } while (true);
    socket_close($msgsock);
} while (true);
 
socket_close($sock);
?>

Et le code du coté "client":
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
<?php   
$adresse='127.0.0.1';
$port=10000;
$_POST['message'] = 'Hello world';
 
if(!empty($_POST['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=$_POST['message'];
        //Ecriture du paquet vers le serveur
        socket_write($socket,$paquet,strlen($paquet));
 
        while ($out = socket_read($socket, 2048)) {
	     echo $out;
	}
 
        //Fermeture de la connexion
        socket_close($socket);
        }
?>

Lorsque le script "serveur" est lancé, il fonctionne parfaitement si j'y accède en telnet.
Lorsque le script "client" est lancé, je ne récupère rien. J'espérai récupérer "PHP: You said 'Hello world'." comme en telnet mais rien. De plus, le serveur n'est ensuite plus accessible en telnet.

Une erreur quelque part ? un oubli ?
Merci beaucoup de votre éventuelle participation =)