Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > PHP > Points particuliers > Comment utiliser les sockets avec php ? Comment faire un chat avec les sockets ? > Partie théorique : l'utilisation des sockets > Les sockets > Lecture du tutoriel

Les sockets

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : azmeuk
Note : 13 / 20 (5 votes)
Visualisations : 13 298

Plus d'informations Plus d'informations
Attaquons-nous aux choses sérieuses. En guise d'introduction, nous allons voir quelques notions théoriques qu'il est nécessaire de connaître pour bien comprendre le fonctionnement des sockets, et des communications réseau en général ; puis nous finirons sur des exemples concrets où nous manipulerons les sockets.
Sommaire du chapitre :
Icône du chapitre
Sommaire Chapitre suivant

Clients, serveurs, IP, ports, TCP, UDP, buffer, c'est quoi tout ça ?

Si tu sais déjà ce qu'est le principe de client-serveur, ce qu'est une adresse IP et comment marchent les protocoles TCP et UDP, alors tu peux directement passer au sous-chapitre suivant : mais une bonne piqûre de rappel n'est jamais néfaste :D .

Premières notions de Client-Serveur


Client, serveur, ça peut faire penser à un restaurant ou un commerce du genre, et tu verras qu'on n'en est pas si loin, en fait. Alors, qu'est-ce qu'un client ? Le client est le programme qui va se connecter à un serveur. Qu'est-ce qu'un serveur ? Un serveur est un programme qui attend les connexions de clients, et qui leur donne ce qu'ils veulent. J'explicite : prenons exemple avec notre ami FireFox. Firefox est un client web, c'est-à-dire un programme qui va se connecter à un serveur web, et lui demander diverses choses : "donne-moi le tuto d'azmeuk sur les sockets !". Le serveur web (comme par exemple Apache -qui est inclus dans Easy-PHP, Wamp etc.-), lui, va "attendre" que FireFox lui demande de lui transmettre une page web, puis va transmettre la page demandée.
Par abus de langage, on confond souvent le programme serveur, et le PC qui l'héberge, de même on confond souvent client et le PC qui l'héberge. Donc, si jamais la désignation de client ou de serveur te semble un peu ambigüe, c'est normal : elle peut avoir deux sens.

Ce qu'il faut retenir, c'est qu'il y a un seul serveur (ou tout du moins une poignée, dans certains cas) pour une multitude de clients. Le Site du Zéro a un serveur web (Lisa) pour 40 000 zéros à l'heure actuelle. Et donc le serveur doit répondre à tous les clients.

Le rapport avec ce tuto ? Eh bien nous allons créer un chat ; et pour ce faire, nous allons créer un client et un serveur. Pour faire simple, imaginons un salon de chat avec quelques utilisateurs connectés. Si l'utilisateur A veut dire à tout le monde "Hello World", alors il envoie un message au serveur et lui dit: "je veux dire Hello World à tout le monde". Le serveur va donc transmettre le message à chacun des clients connectés. Voici un petit schéma illustratif.

Image utilisateur


Adresses IP et Ports


Dans l'océan qu'est le web, ton IP représente les coordonnées de ton PC, c'est son adresse postale ; bref, c'est un numéro propre à ton PC, et c'est uniquement grâce à ça qu'on peut l'identifier. C'est une suite de 4 numéros de 0 à 255 séparés par des points, par exemple : 192.168.0.1
L'adresse IP 127.0.0.1 désigne toujours le PC "local", chaque PC comprend ceci : 127.0.0.1 = MOI.

Pour faire simple (parce que je n'ai pas pour but ici de faire une explication détaillée juste sur le protocole IP), quand tu te connectes à internet, ton FAI attribue à ton PC une adresse IP : par exemple, 123.45.67.89 ; ainsi, quand un autre PC veut communiquer avec toi, il dit: "hey ! Je veux dire un truc à 123.45.67.89 !". Il t'écrit une lettre, avec ton adresse IP comme adresse postale. Mais si ça s'arrêtait là, ce serait bien trop beau ; ce monde de brutes a voulu que ton PC soit une collocation monstre dans laquelle vivent des dizaines de programmes : quand ton PC reçoit un message, qui doit le lire ? Ton serveur web ? Ton serveur MySQL ? Pour parer à cette éventualité, on a donc créé les ports : il y a 65536 ports sur un PC normalement constitué, et à chacun de ces ports et assigné un programme : le port qu'utilise chaque serveur web est le port 80 ; ton serveur web n'ouvrira donc que les lettres adressées à 123.45.67.89:80, et il en va de même pour chaque autre programme avec le port qui lui est assigné.

TCP versus UDP


Quand deux ordinateurs communiquent, il ne font pas les choses n'importe comment. En effet, ils suivent ce qu'on appelle un protocole. Le protocole est un ensemble de règles qui encadrent la transmission d'un message. Par exemple : "tout message envoyé devra avoir un accusé de réception". Les deux protocoles utilisés sur Internet son UDP et TCP qui diffèrent par certains points et sont donc utilisés dans des cas bien distincts :

Le protocole TCP


Le protocole TCP vise la fiabilité, à savoir qu'en gros "tout message envoyé doit être reçu". Ça peut paraître logique, et pourtant, on verra avec UDP. Pour ce faire, TCP use de plusieurs stratagèmes, comme par exemple les accusés de réception. Si, pour chaque lettre envoyée, on a un accusé de réception, alors on est sûrs que la lettre en question a bien atteint le destinataire ; si jamais on ne recevait pas d'accusé de réception au bout d'un certain temps, alors il ne nous reste plus qu'à ré-envoyer la lettre. TCP est assez coûteux en ressource et en bande passante. TCP est donc utilisé dans tous les cas où tu veux être sûr que ton interlocuteur recevra ton message (tu verras que ce n'est pas toujours le cas), et tu y mettras le prix...

Le protocole UDP


Le protocole UDP permet très simplement la transmission d'un message, c'est-à-dire qu'il n'y a aucun accusé de réception comme on l'a vu dans TCP ; donc, tu envoies tout un tas de lettres à un ami, et tu ne te soucies pas de savoir s'il l'a reçu. Pourquoi faire ça ? Eh bien dans tout un tas de cas où tu envoies tellement de messages à ton interlocuteur que tu as grand besoin de bande passante : si ton interlocuteur n'a pas reçu un message sur la masse que tu lui avais envoyée, ce n'est pas grave. Des exemples ? La téléphonie IP, des vidéos en streaming, pas mal de jeux vidéos en ligne (des FPS), etc.

Le buffer


Le buffer, ou mémoire tampon, est selon Wikipedia une zone de mémoire vive ou de disque utilisée pour stocker temporairement des données. Pour faire simple, le buffer est "la liste des choses à envoyer" : c'est le tas d'enveloppes que tu dois envoyer à moult destinataires, et qui trône sur un coin de ton bureau. Ainsi, quand un ordinateur veut envoyer un message, le message transite d'abord par le buffer avant d'être envoyé. A quoi ça sert ? Eh bien ça sert à réconcilier le débit de ta ligne internet et ton processeur. En effet, un processeur d'une fréquence de 3 Ghz par exemple, va effectuer trois milliards d'opérations à la seconde ; ta ligne ADSL n'a pas un débit qui permet de suivre, le processeur met alors tous les messages dans un buffer, qui lui se charge de les transmettre, à la vitesse de la ligne. Nous nous servirons du buffer dans le chapitre pratique de ce tuto.

Activation et liste des fonctions utilisées

Pour reprendre la métaphore de la lettre, si les ordinateurs utilisent la voie postale pour communiquer entre eux, alors une socket est une enveloppe : elle contiendra un message et ira d'un ordinateur à un autre.

Avantages et inconvénients


Avantages



Inconvénients



Activation


Les sockets sont des extensions de php, et nécessitent d'être activées (rappelle-toi, les librairies gd !).

Windows


Il faut utiliser la méthode habituelle : allez chercher dans votre php.ini (par exemple, pour ceux qui utilisent Easyphp, C:\Program Files\Easyphp1-8\php\php.ini), la ligne où il y a
Code : Autre
1
;extension=php_sockets.dll

et supprimez le ";" .

Linux


Pour ma part, les sockets étaient déjà activées, je n'ai pas eu besoin de les activer ; sinon, la technique est la même que sous Windows.
Sauvegardez, redémarrez votre serveur, et c'est parti !

Liste des fonctions


Voici donc la liste des fonctions que nous allons utiliser.

Si tu veux voir la documentation officielle de php sur les sockets, c'est par ici. Et c'est d'ailleurs par là que nous allons commencer !

Utilisation Partie I : côté client

Posons-nous une question primordiale :
Comment on utilise une socket ?



Comme exemple de commencement, je n'ai pas trouvé mieux que l'exemple officiel de PHP (mais je l'ai un poil modifié :p )
Code : PHP
 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
<?php
error_reporting(E_ALL);

echo "<h2>Connexion TCP/IP</h2><br />";

/* Lit le port du service WWW. */
$service_port = getservbyname('www' , 'tcp');

/* Lit l'adresse IP du serveur de destination */
$adresse = gethostbyname('www.siteduzero.com');

/* Crée une socket TCP/IP. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) 
   echo "socket_create() a échoué : raison :  " . socket_strerror ($socket) . "<br />";
else 
   echo "OK.<br />";

echo "Essai de connexion à $adresse sur le port '$service_port'...";
$resultat = socket_connect($socket, $adresse, $service_port);
if ($resultat < 0)
   echo "socket_connect() a échoué : raison : ($result) " . socket_strerror($result) . "<br />";
else 
   echo "OK.<br />";

$envoi = "HEAD / HTTP/1.0\r\n\r\n";
$envoi .= "Host: www.siteduzero.com\r\n";
$envoi .= "Connection: Close\r\n\r\n";
$reception = '';

echo "Envoi de la requête HTTP HEAD...";
socket_write($socket, $envoi, strlen($envoi));
echo "OK.<br />";

echo "Lire la réponse : <br /><br />";
while ($reception = socket_read($socket, 2048)) 
   echo $reception;

echo "Fermeture de la socket...";
socket_close($socket);
echo "OK.<br /><br />";
?>

Le résultat de ce code est disponible ICI.

Si tu n'as rien compris, ce n'est pas grave, je suis là pour t'expliquer. ;) Nous allons reprendre petit à petit le code, mais d'abord quelques explications.
Avec cet exemple, nous allons nous connecter au serveur du Site du Zéro, sur le port http, c'est-à-dire sur le port qu'il utilise pour nous envoyer des pages Web. Le serveur du Site Du Zéro a donc créé une socket sur laquelle nous allons nous connecter. Une fois connecté, nous allons lui poser une question et attendre la réponse.

Quand je dis "sur le port HTTP", c'est un abus de langage, HTTP est un protocole, et non pas un port car un port, comme nous l'avons vu tout à l'heure, est un numéro. Cependant, HTTP n'est pas un protocole du même genre que TCP ou UDP. Souvenez-vous de la définition de "protocole" que j'avais donnée tout à l'heure : le protocole est un ensemble de règles qui encadrent la transmission d'un message. Pour le coup, les règles ne s'appliqueront pas sur la manière d'envoyer le message, mais sur son contenu. Voici un exemple de règle : "Chaque message doit comporter au maximum 256 caractères. Les messages devront commencer par PLOP, et finir par PLIP. Les messages qui commenceront par PLIP-IMPORTANT seront considérés comme plus importants que les autres". L'ensemble des règles des protocoles les plus utilisés sont définis dans les RFC (par exemple AbcdRFC héberge un bon nombre de RFC traduites en français, incluant la RFC HTTP). Par port HTTP, je veux donc dire : le port qu'utilise le protocole HTTP" .


Voyons le code en détails :
Code : PHP
1
error_reporting(E_ALL);

Cette fonction sert simplement à dire à PHP d'afficher presque toutes les erreurs.
Code : PHP
1
$service_port = getservbyname('www' , 'tcp');

Sans détailler, cette fonction sert juste à demander quel est le port qu'utilise le protocole http.
Code : PHP
1
2
/* Lit l'adresse IP du serveur de destination */
$adresse = gethostbyname('www.siteduzero.com');

Comme c'est indiqué dans le commentaire, on récupère avec ceci l'adresse IP du SDZ.

Code : PHP
1
2
3
4
5
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0)
   echo "socket_create() a échoué : raison :  " . socket_strerror ($socket) . "<br />";
else
   echo "OK.<br />";

On commence donc à manier les sockets. Nous créons donc ici une socket vide. Comme il est important que le serveur reçoive CE message, on va utiliser le protocole TCP, on choisit donc les arguments adaptés. Et donc on stocke la socket dans une variable, au même titre que, dans le cours sur les librairies gd, on stockait des images dans une variable.
Une variable, c'est comme une boîte : on peut y mettre n'importe quoi dedans.
Et ensuite, on vérifie que tout s'est bien passé.
La fonction socket_strerror() permet d'afficher dans un langage compréhensible par les êtres humains les différentes erreurs possibles liées à la socket en question. (Un peu comme mysql_error().)

- L'enveloppe est créée.

Code : PHP
1
2
3
4
5
$resultat = socket_connect($socket, $adresse, $service_port);
if ($resultat < 0)
   echo "socket_connect() a échoué : raison : ($resultat) " . socket_strerror($result) . "<br />";
else
   echo "OK.<br />";

Ici, nous allons nous connecter au serveur du Site Du Zéro. Je pense que les arguments de la fonction socket_connect() sont assez compréhensibles : le premier argument doit donc être la socket précédemment créée, le second doit être l'adresse ip du serveur sur lequel nous allons nous connecter ; et enfin, le troisième va être le port du serveur sur lequel on va se connecter.
- On écrit l'adresse sur l'enveloppe :

Code : PHP
1
2
3
4
$envoi = "HEAD / HTTP/1.0\r\n\r\n";
$envoi .= "Host: www.siteduzero.com\r\n";
$envoi .= "Connection: Close\r\n\r\n";
$reception = '';
Ici, on prépare simplement le message qu'on va envoyer au serveur. On ne s'attardera pas sur le contenu du message, car ce qui nous intéresse ici, c'est la façon dont il voyage. Mais si tu veux en savoir plus, voici un tuto fait par un zéro sur le sujet.
- On écrit la lettre :

Code : PHP
1
2
3
echo "Envoi de la requête HTTP HEAD...";
socket_write($socket, $envoi, strlen($envoi));
echo "OK.<br />";

La fonction socket_write() permet d'écrire le message que l'on veut envoyer dans la socket. De même que tout à l'heure, les arguments ne sont pas très compliqués à comprendre : le premier est la socket par laquelle on va envoyer le message, le second est le message et le troisième est la longueur du message.
De son coté, le serveur va régler la longueur maximale du message à recevoir, et donc si l'on envoie un message plus grand que le maximum autorisé par le serveur, le message sera donc tronqué.

- On poste la lettre :

Code : PHP
1
2
3
echo "Lire la réponse : <br /><br />";
while ($reception = socket_read($socket, 2048))
   echo $reception;

Ici, nous allons lire la réponse du serveur grâce à la fonction socket_read() . Le premier argument est, encore une fois, la socket que nous allons écouter et le second, la longueur maximum de la réponse.
Au même titre que tout à l'heure, si la réponse est plus longue que la limite fixée, alors elle sera tronquée.


L'utilisation de la fonction socket_read() est un peu spéciale : on pourrait croire que la fonction socket_read() renvoie false quand il n'y a pas de réponse ; or, c'est quelque peu différent : cette fonction renvoie false si la socket n'existe pas, ou plus (c'est-à-dire qu'elle aurait été fermée par le serveur ou par le client). Quand PHP va lire cette fonction, le code va se geler tant qu'il n'y aura pas de réponse, c'est-à-dire tant qu'il n'y aura pas de réponse à la socket, PHP ne va pas lire le code plus loin, et il peut attendre très longtemps comme ça :p. Dans ce cas, on parle de sockets bloquantes. (Note qu'il existe aussi des sockets non bloquantes, on peut d'ailleurs transformer l'une en l'autre au moyen de socket_set_block() et socket_set_non_block().) Et enfin socket_read() renvoie true lorsqu'il y a une réponse. Donc ici, un if aurait le même effet que le while actuel.

Une réponse a été envoyée par le récepteur, mais par la même enveloppe.

Utilisation Partie II : côté serveur

Comment on utilise une socket coté serveur ?



J'ai concocté un petit serveur, et comme tout à l'heure, nous allons l'étudier ligne par ligne.
Code : PHP
 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
<?php
//Temps maximum d'exécution de la page <gras><couleur nom="rouge">nul</couleur></gras>
set_time_limit(0);       

//Coordonnées du serveur == le pc qui lancera cette page
$port = 24243;
$adresse = "127.0.0.1";

//On crée la socket
if(($socket = socket_create(AF_INET, SOCK_STREAM, 0)) === false)
        echo 'La création de la socket a échoué : '.socket_strerror($socket)."\n<br />";
        
//On assigne la socket à une adresse et à un port, que l`on va écouter par la suite
if(($assignation = socket_bind($socket, $adresse , $port)) < 0)
        echo "L'assignation de la socket a échoué : ".socket_strerror($assignation)."\n<br />";
        
//On prépare l`écoute
if(($ecoute = socket_listen($socket)) === false)
        echo "L'écoute de la socket a échoué : ".socket_strerror($ecoute)."\n<br />";

//Le code se bloque jusqu`à ce qu'une nouvelle connexion client soit établie
if(($client = socket_accept($socket)) === false)
        echo "Le client n'a pas pu se connecter : ".socket_strerror($client)."\n<br />";
        
//Lors d'une connexion, le code reprend ici, il est temps de lire ce qu'on nous envoie
if(($reception = socket_read($client , 255)) === false)
        echo "La socket n'a pas pu être lue : ".socket_strerror($reception)."\n<br />";
elseif( $reception == 'plop' )
        $reponse = "J'aime les plop";
else
        $reponse = "J'aime pas les ".$reception;
        
//Si ça ne marche pas, c'est qu`il est déconnecté
if(( socket_write($client, $reponse, strlen($reponse)) ) === false)
        echo "Client déconnecté\n<br />";
else
        echo "Message envoyé : ".$reponse;

//Fermeture de la socket du client
socket_close($client);

//Fermeture du serveur
socket_close($socket);
?>


Code : PHP
1
set_time_limit(0);

set_time_limit() permet de choisir le temps maximal d'exécution de la page en secondes : si la valeur est nulle, alors il n'y a pas de limite ; on verra un peu plus bas à quoi ça va nous servir.

Code : PHP
1
2
$port = 24243;
$adresse = "127.0.0.1";

Il faut ici donner l'adresse ip du serveur (et choisir un port non utilisé).

Code : PHP
1
2
if(($socket = socket_create(AF_INET, SOCK_STREAM, 0)) === false)
        echo 'La création de la socket a échoué : '.socket_strerror($socket)."\n<br />";

Comme tout à l'heure, on crée une socket vide, et comme tout à l'heure, les arguments de la fonction socket_create() sont adaptés au protocole TCP. :p
On crée non pas une enveloppe, mais une boîte aux lettres

Code : PHP
1
2
if(($assignation = socket_bind($socket, $adresse , $port)) < 0)
        echo "L'assignation de la socket a échoué : ".socket_strerror($assignation)."\n<br />";

Nouvelle fonction par rapport à tout à l'heure : on assigne la socket à un port, et à une adresse IP. On définit par quel port vont passer nos sockets entrantes. Le premier argument de socket_bind() est la socket précédemment créée, le second est l'adresse IP du serveur et le troisième, le port à écouter.
On se donne une adresse

Code : PHP
1
2
if(($ecoute = socket_listen($socket)) === false)
        echo "L'écoute de la socket a échoué : ".socket_strerror($ecoute)."\n<br />";

Ici, on va écouter un port, c'est-à-dire qu'on va surveiller le port pour voir toutes les connexions. Le seul argument de la fonction socket_listen() est la socket que l'on a créée, à qui on a assigné un port et une adresse.
On se met à regarder la boîte aux lettres pour voir si quelqu'un ne tente pas de nous poster une lettre

Code : PHP
1
2
if(($client = socket_accept($socket)) === false)
        echo "Le client n'a pas pu se connecter : ".socket_strerror($client)."\n<br />";

Là, on va accepter les sockets clients qui auraient tenté de se connecter.
Comme tout à l'heure pour la fonction socket_read(), le code va s'arrêter à cet endroit tant qu'aucune socket n'aura été lue, d'où l'intérêt du set_time_limit(0);. Et tout comme socket_read(), socket_accept() renvoie false si l'écoute du port échoue (si la socket est arrêtée ou n'existe pas), et retourne true dès qu'une socket tente de se connecter.
Le seul argument de la fonction socket_accept() est la socket que l'on a créée, à qui on a assigné un port et une adresse, et qui écoute un port. On crée grâce à socket_accept() une socket "client", ici $client.
On accepte la première lettre qui vient

Code : PHP
1
2
3
4
5
6
if(($reception = socket_read($client , 255)) === false)
        echo "La socket n'a pas pu être lue : ".socket_strerror($reception)."\n<br />";
elseif( $reception == 'plop' )
        $reponse = "J'aime les plop";
else
        $reponse = "J'aime pas les ".$reception;

socket_read() va lire la socket précédemment acceptée. Nous allons choisir notre réponse en fonction du message que l'on aura lu. Le premier argument est la socket "client" et le second, la longueur maximum de la réponse.
On lit la lettre, et on formule notre réponse en fonction du contenu de cette première

Code : PHP
1
2
3
4
if(( socket_write($client, $reponse, strlen($reponse)) ) === false)
        echo "Client déconnecté\n<br />";
else
        echo "Message envoyé : ".$reponse;

La fonction socket_write() permet donc de répondre à la socket client, par la socket "client". Comme tout à l'heure, le premier argument est la socket "client", le second est le message et le troisième, la longueur du message. Si l'écriture de la réponse sur la socket "client" ne marche pas, on en conclut qu'elle n'existe plus, donc que le client est déconnecté.
On répond à l'expéditeur, en utilisant la même enveloppe que lui, et si l'envoi ne fonctionne pas, c'est qu'il a déménagé ou qu'il est mort. :euh:

Code : PHP
1
socket_close($client);

On ferme la socket client : rien de compliqué là-dedans, mais il ne faut pas l'oublier.

Code : PHP
1
socket_close($socket);

On ferme le serveur, rien de compliqué non plus là-dedans !

Résumons un peu...


Ici, du coté serveur, on va surveiller un port, accepter la première connexion qui vient et seulement la première, puis répondre à la socket en fonction de ce qu'elle nous aura envoyé. Pour le moment, après une connexion, le serveur s'éteint ; cependant, il est tout à fait possible d'accepter toutes les connexions en faisant un boucle infinie(while(true)) au dessus de socket_accept(); (ce que nous allons faire pour le chat) !
Voici un petit script client pour tester le serveur.
Code : PHP
 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
<?php
//Coordonnées du serveur
$port = 24243;
$adresse = "127.0.0.1";

/* Cree une socket TCP/IP. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0)
   echo "socket_create() a échoué : raison :  " . socket_strerror ($socket) . "<br />";
else
   echo "OK.<br />";

echo "Essai de connexion à $address sur le port '$port'...";
$resultat = socket_connect($socket, $adresse, $port);
if ($resultat < 0)
   echo "socket_connect() a échoué : raison : ($resultat) " . socket_strerror($resultat) . "<br />";
else
   echo "OK.<br />";

$envoi = 'plap';

echo "Envoi de la requête $envoi ...";
socket_write($socket, $envoi, strlen($envoi));
echo "OK.<br />";

echo "Lire la réponse : <br /><br />";
while ($reponse = socket_read($socket, 2048))
   echo $reponse;

echo "<br />Fermeture de la socket...";
socket_close($socket);
echo "OK.<br /><br />";
?>

Lance le serveur (qui tournera donc à l'infini, tant qu'aucune socket ne s'y sera connectée), puis dans une autre fenêtre, lance le script client. Tu pourras voir la réponse du serveur sur la page client. Essaye avec $envoi = 'plop';, et vois la différence.
Tu peux tester ces deux scripts : lance dans un premier onglet le serveur, puis dans un second le client.

Maintenant que tu sais te servir des sockets, tu peux te la péter auprès de tes potes qui eux, ne savent pas les manier, les nuls ! :-°
Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 31/01/2006 à 16:35:58
Modifié : le 25/09/2008 à 18:58:54
Avancement : 100%
Licence : Copie non autorisée

15 commentaires

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 79 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0493s (0.0383s)