
function creation_socket() { $socket = socket_create(AF_INET , SOCK_DGRAM , SOL_UDP); /* * AF_INET est la famille d'adresses Internet, * SOCK_DGRAM correspond au type de sockets, ici socket mode non connecté ( UDP ) * SOL_UDP est le protocole utilisé, UDP donc. */ if($socket < 0) { echo 'Erreur de création de la socket.'; exit(1); } /* Retourne le descripteur de la socket */ return $socket; }
function fermeture_socket($socket) { /* Fermeture de la socket et détruit les ressources utilisées par celle-ci. */ socket_close($socket); }Code servant au serveur :
function attachement_socket_addr($socket, $addr, $port) { /* Sur un serveur il faut attacher l’adresse à une socket, ici on attachera à une adresse ip et un port */ socket_bind($socket, $addr, $port); }La fonction servant à attacher une adresse à une socket est un bind, (idem pour des sockets C où la fonction est bind();)
define('TAILLE_MAX_DATA',1500); function reception_donnees($socket, $port_ecoute) { $from = ""; $reception = socket_recvfrom($socket, $donnees, TAILLE_MAX_DATA, 0, $from, $port_ecoute); /* On précise à socket_recvfrom, le descripteur de la socket, la variable (buffer) permettant de recevoir les données, la taille des données à recevoir, l'adresse et le port de destination */ /* socket_recvfrom() renvoi le nombre d'octets reçu ou -1 si non reçu */ if($reception < 0) echo 'Erreur de réception des données'; else echo 'Message reçu : '.$donnees; }Nous définissons une constante TAILLE_MAX_DATA, qui décrit la taille maximum des données que l’on recevra dans notre buffer, ici elle est fixée à 1.5ko.
<?php include('function.inc.php'); $addr = '127.0.0.1'; $port = '65000'; $socket = creation_socket(); attachement_socket_addr($socket, $addr, $port); reception_donnees($socket, $port); fermeture_socket($socket); ?>Ce code est plus clair et plus simple à comprendre que si on avait un enchainement de fonctions et de code permettant de récupérer les erreurs.

function envoi_donnees($socket, $donnees, $addr_dest, $port_dest) { $longueur_donnees = strlen($donnees); /* Calcul de la taille des données */ $envoi = socket_sendto($socket, $donnees, $longueur_donnees, 0, $addr_dest, $port_dest); /* On précise à socket_sendto, le descripteur de la socket, les données à envoyer, sa taille, l'adresse et le port de destination */ /* socket_sendto() renvoi le nombre d'octets transmis ou -1 si non transmis */ if($envoi < 0) echo 'Erreur d'envoi des données'; else echo 'Données envoyées'; }
On a besoin du descripteur de la socket, des données à envoyer et de l’adresse/port de destination.
Même principe d’erreur, si l’envoi échoue la fonction renvoi -1 dans $envoi, on affiche donc un message.
Une fois function.inc.php complété de cette fonction, on peut crée client.php :
<?php include('function.inc.php'); $socket = creation_socket(); $addr_dest = '127.0.0.1'; $port_dest = '65000'; /* Port d'écoute du serveur */ $donnees = 'Bonjour je vous transmets un message !'; envoi_donnees($socket, $donnees, $addr_dest, $port_dest); fermeture_socket($socket); ?>
IV - Activer les sockets
Sous EasyPHP, les sockets ne sont pas activés par défaut, il faut donc les activer :
Clique droit sur l’icône d’Easyphp > Configuration > PHP.
Ceci vous ouvre le fichier de configuration de PHP, chercher la ligne suivante :
;extension=php_sockets.dll
Puis enlevez le point virgule et enregistrer, puis redémarrer Apache.
Inscrire un commentaire